请教 django 查询问题

2018 年 10 月 10 日
 zhuyw2006
有一个字段是<年月日时分秒>,FSTTIME = models.CharField(max_length=14, blank=True, null=True)
例:20181010112339

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

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

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

@PythonAnswer 应该如何查询呢?谢谢
lonelinsky
2018 年 10 月 11 日
@zhuyw2006
如果是用 TimeField 的话用 ` Q(FSTTIME__gte=160000) | Q(FSTTIME__lte=050000) ` 应该是可以的呀
zhuyw2006
2018 年 10 月 11 日
@lonelinsky 谢谢,安装您的方法改成 DateTimeField 字段就可以了,不过查询的时候要加 FSTTIME__time__gte,
因为我只需时间。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/496461

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX