sqlite - 从 SQLite 正确选择以前的日期

标签 sqlite date datetime where-clause strftime

读完这里的十几条回复并进行测试后,我别无选择,只能寻求帮助。

我的目标很简单,我希望从以下位置选择数据:

  • 前一小时
  • 前一天

我的表使用TEXT类型的列,名称为“timestamp”,保存时间的格式为:2022-03-04 05:44:11

查询应该非常简单,但据我注意到,有许多函数不受支持,例如 DATE_SUB,因此我测试了我在这里找到的内容。

例如:

SELECT `timestamp` FROM ... where datetime(timestamp) >= datetime('now', '-1 Day')

结果:

2022-03-03 16:33:35
2022-03-03 15:05:17
2022-03-04 05:44:11
2022-03-04 05:40:22
2022-03-04 05:36:38
2022-03-04 05:25:53
2022-03-04 05:16:16

这是不正确的,因为它将返回前一天的数据+今天的数据。我不需要那个,我只需要前一天的数据。

-1 小时和其他所有内容都会发生同样的情况。我也尝试过 strftime 但没有成功。

这个任务应该非常容易实现,但 SQLite 不会“玩球”。

有人可以建议如何做到这一点吗?

非常感谢

最佳答案

对于前一天的行,使用函数 date() 去除时间戳的时间部分:

WHERE date(timestamp) = date('now', '-1 day')

对于前一小时的行,请使用函数 strftime() 以及去除分钟和秒的修饰符:

WHERE strftime('%Y-%m-%d %H', timestamp) = strftime('%Y-%m-%d %H', 'now', '-1 hour')

关于sqlite - 从 SQLite 正确选择以前的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71347280/

相关文章:

android - 如何优化 Android 中的空间数据检索

python - 具有重复值的 Sqlite 列

c# - 如何格式化 mssql 日期时间列以仅在网页输入字段上显示时间?

python - 如何将混合时间和日期时间值的列转换为日期时间(或时间)?

linux - SQLite 中的负日期

mysql - 查询以查看订阅是否在两个日期范围内有效

java - 如何在最初给定的时区中存储和显示日期?

PHP-预匹配?

c# - MySQL Connector/NET 的 MySqlCommand 不使用参数

sqlite - 查找字符串中的确切单词