如何在SQLite中对日期范围(从日期时间字符串到UNIX时间戳)执行SELECT?

e37o9pze  于 2022-12-04  发布在  SQLite
关注(0)|答案(1)|浏览(260)

你好,我有一个数据库SQLite,其中有一个表“数据”,列“时间@时间戳”是一个真实的,例如1669729394.792,所以我必须选择一个使用2个日期的数据范围(开始日期和结束日期)由操作员以人工日期时间格式写入(例如2022-11-29)并提取所有数据,我应该将日期从标准格式转换为UNIX时间戳
我试过这样做,但对我不起作用:
SELECT * FROM data WHERE date([time@timestamp]) BETWEEN CAST(strftime('%s', '2022-11-29') AS REAL) AND CAST(strftime('%s', '2022-11-30') AS REAL)

cdmah0mi

cdmah0mi1#

函数date()带有一个数值参数,但不带修饰符,它将数值视为Julian day,并以文本格式YYYY-MM-DD返回该日期。
但是,您的日期时间值不是儒略日,而是unix timestamps,您可以使用修饰符'unixepoch'将它们转换为可读的日期格式YYYY-MM-DD

date([time@timestamp], 'unixepoch')

之后,您可以直接将结果与YYYY-MM-DD的任何日期进行比较,而不需要转换:

SELECT * 
FROM data  
WHERE date([time@timestamp], 'unixepoch') BETWEEN '2022-11-29' AND '2022-11-30'

或者,保持[time@timestamp]的值不变,并将2个日期边界转换为unix时间戳:

SELECT * 
FROM data  
WHERE [time@timestamp] BETWEEN strftime('%s', '2022-11-29') AND strftime('%s', '2022-11-30')

或者,如果您的SQLite版本是3.38.0+:

SELECT * 
FROM data  
WHERE [time@timestamp] BETWEEN unixepoch('2022-11-29') AND unixepoch('2022-11-30')

相关问题