SQLite如何选择2个日期之间的数据,包括时间

qni6mghb  于 2023-01-13  发布在  SQLite
关注(0)|答案(2)|浏览(129)

我的表格中有单独的日期和时间列。日期为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'

我写了它,但当然它不像我期望的那样工作。

v64noz0r

v64noz0r1#

最好的解决方法,也是您唯一需要的方法,就是开始以可排序的ISO格式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可排序格式至关重要。

5w9g7ksd

5w9g7ksd2#

如果你的目标是sqlite,它没有复杂的时间戳类型,但是你有另外一个选择,你可以把它存储为unix时间戳,它是一个整数,代表从1970-01-01 00:00:00 UTC的时间点偏移的秒数,表格格式是:

CREATE TABLE testtable (
    date INTEGER
);

您可以使用unixepoch函数将字符串表示转换为该unix时间戳格式。要插入新日期,请用途:

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的偏移量。

相关问题