试图让python sqlite与DATE而不是实际的DATETIME字段进行比较

问题描述

我有一些无法使用的代码...

currentTime = dt.utcNow().date() get just the day has to be UTC cause that what stored in db.
print(currentTime)  #shows day of 2020-09-03
cur = conn.cursor()
cur.execute("SELECT f.user_id,u.first_name,f.location,f.checkin,f.checkout FROM auth_user u JOIN covidlog_onsitelog as f ON (f.user_id=u.id) WHERE CAST(f.checkin as 'DATE()')  = ? or CAST(f.checkout as 'DATE()') =?",(currentTime,currentTime))

该字段是在django中创建为模型的,其中包含以下项目:

2020-09-03 00:40:58.901602

但是我只是想比较DAY,而不考虑时间...尽管它似乎没有用。

对我来说,这看起来不错,但没有产生结果,所以我只能假设它仍然仍然以某种方式将日期与时间戳进行比较...知道如何不这样做并与日期进行字面比较吗?

解决方法

您要date()吗?

where date(f.checkin) = date(?) or date(f.checkout = date(?)

尽管键入时间更长,但在表列上不使用日期函数时,它可能会更有效地表示出来:

where 
    (f.checkin >= date(?) and f.checkin < date(?,'+1 day')
    or (f.checkout >= date(?) and f.checkout < date(?,'+1 day')
,

检查您的f.checkin和f checkout字段是否为datetimestring,在这种情况下,您可以使用date(f.checkin)和date(f.checkout)代替CAST(f.checkin作为'Date()') 您可能需要查看“ https://stackoverflow.com/questions/4428795/sqlite-convert-string-to-date”和“ https://www.tutlane.com/tutorial/sqlite/sqlite -date-function#:〜:text =语法%20of%20SQLite%20date(),datetime%20string%20value%20into%20date。&text =%20SQLite%20date()%20function,YYYY%2DMM%2DDD%20format。 ” 您的WHERE子句如下:

WHERE
    DATE(f.checkin) = ? OR DATE(f.checkout) = ?