请教 django 查询问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhuyw2006
V2EX    Django

请教 django 查询问题

  •  
  •   zhuyw2006 2018-10-10 19:38:32 +08:00 3564 次点击
    这是个创建于 2588 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有一个字段是<年月日时分秒>,FSTTIME = models.CharField(max_length=14, blank=True, null=True)
    例:20181010112339

    我需要根据开始时间(时分秒),和结束时间(时分秒)。去查询这个字段;
    而且可能会跨越凌晨,比如:从下午 16 点 到 凌晨 5 点 ( 160000 ~ 050000 );
    不知道这样能不能查询呢?谢谢
    13 条回复    2018-10-11 11:05:31 +08:00
    Leigg
        1
    Leigg  
       2018-10-10 19:53:11 +08:00 via iPhone
    怎么查的到呢?
    应该存时间戳,查的时候条件随便给,都可以转换成时间戳在库里面查。
    zhuyw2006
        2
    zhuyw2006  
    OP
       2018-10-10 20:00:19 +08:00
    @Leigg 你好,是把时间信息单独放在 TimeField 字段吗?
    lonelinsky
        3
    lonelinsky  
       2018-10-10 20:06:55 +08:00
    用 DateTimeField,然后啥问题都解决了,时间切片都可以 https://docs.djangoproject.com/en/2.1/ref/models/fields/#datetimefield
    fatelovely
        4
    fatelovely  
       2018-10-10 20:08:35 +08:00
    用字符串类型存储时间信息,这不是把一个简单的问题生生复杂化了吗?

    如果是固定的查询要求,比如「下午 16 点到凌晨 5 点」,可以通过构造正则表达式,还是可以查的。

    如果是动态的查询要求,就算了吧。重新开一个时间戳字段,使用当前的字符串字段初始化一下,是正道。
    zhuyw2006
        5
    zhuyw2006  
    OP
       2018-10-10 20:17:13 +08:00
    @lonelinsky
    @fatelovely
    我只需要时分秒,使用 TimeField 字段就可以了吧?
    查询下午 16 点 到 凌晨 5 点的时候是不是 FSTTIME__gte=160000 FSTTIME__lte=050000 ?
    Leigg
        6
    Leigg  
       2018-10-10 20:59:47 +08:00 via iPhone
    不是,就像存一个 int 类型把时间戳存进去就可以了。integerfield
    Leigg
        7
    Leigg  
       2018-10-10 21:01:03 +08:00 via iPhone
    timefield 我想也是能够解决问题的,只是我用的最多的还是时间戳,什么数据库都可以存。
    zhuyw2006
        8
    zhuyw2006  
    OP
       2018-10-10 22:24:47 +08:00
    @fatelovely 你好,我现在单独使用字符串字段放时间,当天到凌晨的应该如何查询呢?
    我现在这样 Q(FSTTIME__range=(checkPeriodSTime, “ 235959 ”)) &
    Q(FSTTIME__range=("000000", checkPeriodETime))
    查询不到。
    NaVient
        9
    NaVient  
       2018-10-11 08:40:43 +08:00
    @zhuyw2006 写个脚本就把里边的数据转了,继续用字符串存时间以后你的坑会越来越多的
    PythonAnswer
        10
    PythonAnswer  
       2018-10-11 09:02:25 +08:00 via iPhone
    时间戳。自己换算 hms。这样跨日方便。
    不跨日可以用 datetime 记得可以单独提取年月日时分秒。
    zhuyw2006
        11
    zhuyw2006  
    OP
       2018-10-11 09:58:22 +08:00
    @NaVient 我现在已经独立出来了。不过还是不知道怎么查询跨越凌晨的问题,比如:从下午 16 点 到 凌晨 5 点 ( 160000 ~ 050000 );

    @PythonAnswer 应该如何查询呢?谢谢
    lonelinsky
        12
    lonelinsky  
       2018-10-11 10:10:41 +08:00
    @zhuyw2006
    如果是用 TimeField 的话用 ` Q(FSTTIME__gte=160000) | Q(FSTTIME__lte=050000) ` 应该是可以的呀
    zhuyw2006
        13
    zhuyw2006  
    OP
       2018-10-11 11:05:31 +08:00
    @lonelinsky 谢谢,安装您的方法改成 DateTimeField 字段就可以了,不过查询的时候要加 FSTTIME__time__gte,
    因为我只需时间。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     923 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 170ms UTC 21:24 PVG 05:24 LAX 13:24 JFK 16:24
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86