我的表格中有单独的日期和时间列。日期为mm/dd/yyyy,时间为hh:mm,但我可以更改格式。我想列出2个日期/时间之间的数据。我该怎么做?
select * from testtable where date >= '01/10/2022' AND date <= '01/10/2023' AND time >= '13:45' AND time <= '15:50'
我写了它,但当然它不像我期望的那样工作。
v64noz0r1#
最好的解决方法,也是您唯一需要的方法,就是开始以可排序的ISO格式yyyy-mm-dd hh:ii:ss存储时间戳。
yyyy-mm-dd hh:ii:ss
SELECT * FROM testtable WHERE date BETWEEN '2022-01-10 13:45:00' AND '2023-01-10 15:50:00';
这里要认识到的是SQLite实际上没有日期列类型,相反,您总是将日期/时间戳存储为 text,因此使用如上所示的ISO可排序格式至关重要。
5w9g7ksd2#
如果你的目标是sqlite,它没有复杂的时间戳类型,但是你有另外一个选择,你可以把它存储为unix时间戳,它是一个整数,代表从1970-01-01 00:00:00 UTC的时间点偏移的秒数,表格格式是:
1970-01-01 00:00:00 UTC
CREATE TABLE testtable ( date INTEGER );
您可以使用unixepoch函数将字符串表示转换为该unix时间戳格式。要插入新日期,请用途:
unixepoch
INSERT INTO testtable (date) VALUES (unixepoch('2023-01-11T11:30:00+01:00'))
查找匹配的行现在就像比较整数一样容易,你可以在应用层将datetime表示转换为unix timestamp,大多数编程环境都提供了这样的时间实用函数/库,或者仍然可以使用sqlite中的unixepoch函数作为where子句。
SELECT * FROM testtable WHERE date >= unixepoch('2022-10-01T13:45:00Z') AND date <= unixepoch('2023-10-01T15:50:00Z')
最后一个Z表示UTC时区,但是您可以使用另一个+HH:00扩展来调整它,它反映了日期时间表示相对于utc的偏移量。
Z
+HH:00
2条答案
按热度按时间v64noz0r1#
最好的解决方法,也是您唯一需要的方法,就是开始以可排序的ISO格式
yyyy-mm-dd hh:ii:ss
存储时间戳。这里要认识到的是SQLite实际上没有日期列类型,相反,您总是将日期/时间戳存储为 text,因此使用如上所示的ISO可排序格式至关重要。
5w9g7ksd2#
如果你的目标是sqlite,它没有复杂的时间戳类型,但是你有另外一个选择,你可以把它存储为unix时间戳,它是一个整数,代表从
1970-01-01 00:00:00 UTC
的时间点偏移的秒数,表格格式是:您可以使用
unixepoch
函数将字符串表示转换为该unix时间戳格式。要插入新日期,请用途:查找匹配的行现在就像比较整数一样容易,你可以在应用层将datetime表示转换为unix timestamp,大多数编程环境都提供了这样的时间实用函数/库,或者仍然可以使用sqlite中的
unixepoch
函数作为where子句。最后一个
Z
表示UTC时区,但是您可以使用另一个+HH:00
扩展来调整它,它反映了日期时间表示相对于utc的偏移量。