作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Booking
具有 start
的模型和 end
日期时间字段。我想知道预订涵盖多少天。我可以在 Python 中做到这一点,但我需要这个值来进行进一步的注释。
这是我尝试过的:
In [1]: Booking.objects.annotate(days=F('end')-F('start'))[0].days
Out[1]: datetime.timedelta(16, 50400)
(end.date() - start.date()).days + 1
.我怎样才能在数据库中做到这一点,最好是通过 ORM(例如数据库函数),但是一个
RawSQL
就足以让这个出门吗?
最佳答案
我已经编写了几个数据库函数来转换和截断日期以解决 PostgreSQL 下的这两个问题。 DATE_PART
和 DATE_TRUNC
我使用的内部函数是特定于数据库的 ☹
from django.db.models import Func
class DiffDays(Func):
function = 'DATE_PART'
template = "%(function)s('day', %(expressions)s)"
class CastDate(Func):
function = 'date_trunc'
template = "%(function)s('day', %(expressions)s)"
In [25]: Booking.objects.annotate(days=DiffDays(CastDate(F('end'))-CastDate(F('start'))) + 1)[0].days
Out[25]: 18.0
关于django - 如何以天为单位注释日期时间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38477352/
我是一名优秀的程序员,十分优秀!