首页 > 解决方案 > 关于日期时间的“LIKE”查询的 Django ORM 语法

问题描述

我有这张表,其中包含格式为“2021-03-12 08:12:44.350176”的“日期”列。我想比较一个外部日期,例如“2021-03-12 08:12:44”

我试过这个

new_date = datetime.datetime(2021, 3, 12, 8, 12, 44, tzinfo=<UTC>)

obj = Test.objects.filter(date__contains=new_date).all()

但它不起作用,它返回空集。我的目标是根据 new_date 获取所有记录。

有没有办法删除毫秒或比较两个日期的方法?

标签: pythondjango

解决方案


您似乎想在截断毫秒的同时比较日期时间到秒。您可以通过使用Trunc[Django docs]或其子类之一来做到这一点(和类似的)。为了截断您可以使用的秒数TruncSecond

import datetime
from django.db.models.functions import TruncSecond
from django.utils import timezone


new_date = datetime.datetime(2021, 3, 12, 8, 12, 44, tzinfo=timezone.utc)

obj = Test.objects.annotate(
    trunc_date=TruncSecond(
        'date',
        tzinfo=timezone.utc
    )
).filter(trunc_date=new_date)

推荐阅读