gpt4 book ai didi

mysql - 如何针对时间戳执行查询?

转载 作者:太空宇宙 更新时间:2023-11-03 18:25:13 24 4
gpt4 key购买 nike

我希望能够找到在今天之前或之后特定天数创建的条目。我有一些包含时间戳的模型。数据库中大约有 70k 条记录,因此运行 .all.each 需要很长时间。

我希望做类似的事情

Model.find_by_updated_at(Date.today - 1)

似乎 updated_at 实际上返回类 Time,而不是 Date;因为它精确到分钟和秒,所以我不能做类似的事情

Model.find_by_updated_at(Time.now + 10000) # ten thousand seconds

因为我的请求只想查找在特定日期更改的模型。

有没有办法使用查找来做到这一点?

我想我可以编写自己的 SQL 查询而不是使用 find,但我不确定如何构建它以排除通过 hh:mm:ss 进行搜索并且只查看日期。

最佳答案

您的查询正在查找在特定时间创建的模型。您可能想要的是返回在特定时间后创建的东西:

Model.where('updated_at>=?', Date.today - 1)

或者可能在一个范围内:

Model.where('updated_at BETWEEN ? AND ?', Date.today - 1, Date.today)

有几种方法可以做到这一点。如果经常这样做,您可能会发现创建可索引的 DATE 列会更快。

另一种方法是像这样动态地做:

Model.where('DATE(updated_at)=?', Date.today - 1)

几乎总是可以用 ActiveRecord 术语表达您想要的内容,而不必诉诸编写您自己的查询。事实上,最好避免这种情况,除非你有充分的理由让你的代码更易于维护。

请记住,“天”充其量只是一个相当模糊的概念。如果您以 UTC 时间存储数据(您应该如此),则需要调整开始和结束时间,否则您将使用 UTC 00:00:00 作为一天的开始。这可能与您的期望不符。

关于mysql - 如何针对时间戳执行查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12310513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com