从 SQLite 正确选择以前的日期

发布于 2025-01-11 17:28:51 字数 735 浏览 0 评论 0原文

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

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

  • 前一小时
  • 前一天

我的表使用 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 并不“玩球”。

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

非常感谢

After reading a dozen replies here and testing them, I have no choice but to ask for help.

My goal is quite simple, I wish to select data from:

  • Previous hour
  • Previous day

The table I have uses a column of type TEXT with the name "timestamp", the format of time being save is: 2022-03-04 05:44:11.

Query should be quite simple but from what I noticed there are many functions unsuported like DATE_SUB, so I have tested what I found around here.

For example:

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

Result:

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

This is incorrect, because it will return previous day data + today inclusive. I don't want that, I need the previous day only.

Same thing happens with -1 Hour and everything else. I have also tried with strftime but without success.

This task should be extremely simple to achieve and yet SQLite does not "play ball".

Can someone advise how to do this please?

Many Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦忆晨望 2025-01-18 17:28:51

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

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

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

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

For the rows of the previous day use the function date() to strip off the time part of the timestamp:

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

For the rows of the previous hour use the function strftime() with modifiers that strip off minutes and seconds:

WHERE strftime('%Y-%m-%d %H', timestamp) = strftime('%Y-%m-%d %H', 'now', '-1 hour')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文