django 查询集按小时、分钟和秒排序

Posted

技术标签:

【中文标题】django 查询集按小时、分钟和秒排序【英文标题】:django querysets order by hour, minute and seconds 【发布时间】:2015-12-17 06:44:12 【问题描述】:

我在 models.py 中有日期时间对象:

class Tournament(models.Model):
    date = models.DateTimeField('Event time')

但是,锦标赛可能有每日或每周锦标赛的标志(意味着每天或每周重复)。所以我想按日期对我的比赛进行排序,但忽略 yearmonthday。 如何按小时、分钟和秒对我的比赛进行排序? order_by 有可能还是我必须使用原始 sql? 我正在使用 postgresql 和 django 1.8。

【问题讨论】:

【参考方案1】:

最好的解决方案是使用Func:

Tournament.objects.order_by(Func('date', function='"time"')).all()

但它是 PostgreSQL 特有的,因为 "time"(column_name) 是它从 timestamp 中提取时间值的方法之一(使用类似函数的语法进行转换可以获得 time 部分)。

【讨论】:

如果不需要注解,可以直接按顺序使用表达式:Tournament.objects.order_by(Func('date', function='"time"')) 通过搜索相同的排序方式发现了这一点,只是想补充一点,它也可以使用 sqlite。尽管使用类似这样的东西似乎“更安全”:order_by('date__hour', 'date__minute', 'date__second')

以上是关于django 查询集按小时、分钟和秒排序的主要内容,如果未能解决你的问题,请参考以下文章

Django 查询集按时间间隔聚合

Presto SQL / Athena:如何从“间隔天到秒”只返回小时、分钟和秒

多对多关系的查询集按列表中的匹配数排序

如何在 SQL 中将小时、分钟和秒 (HH:mm:ss) 转换为分钟和秒 (mm:ss)

如何设置 DateTime 小时、分钟和秒?

将天、小时、分钟和秒转换为整数