gpt4 book ai didi

MySQL Select rows <= now(),使用分隔的时间字段

转载 作者:行者123 更新时间:2023-11-30 23:34:19 33 4
gpt4 key购买 nike

我有一个包含日期 (yyyy-mm-dd)、小时 (1-12)、分钟 (00-59)、ampm(a/p) 和时区 (pst/est) 字段的表“t”。

如何选择 <= now() 的行? (即已经发生)

感谢您的建议!

编辑:这样做没有注意小时/分钟/ap/tz 字段:

SELECT * FROM t.date WHERE date <= now()

最佳答案

这是一种方法 - 将所有秒数、分钟数等组合成一个日期并与 NOW() 进行比较,确保您在同一时区进行比较。 (未经测试):

SELECT *
FROM t
LEFT JOIN y ON t.constant=y.constant
WHERE CONVERT_TZ(STR_TO_DATE(CONCAT(date,' ',hour,':',minute,' 'ampm),
'%Y-%m-%d %l:%i %p' ),
timezone,"SYSTEM") < NOW();

如果您的时间是 01 - 12 而不是 1-12,则在 STR_TO_DATE 中使用 %h 而不是 %l

STR_TO_DATE 尝试将您的日期和时间列放在一起并将它们转换为日期。

CONVERT_TZ(...,timezone,"SYSTEM") 将此日期从 timezone 列中指定的任何时区转换为系统时间。

然后将其与始终使用系统时间的 NOW() 进行比较。

顺便说一句,也许您应该使用 MySQL 的日期数据类型创建一个单列 date,因为对其进行算术运算要容易得多!

供引用,here是非常有用的 mysql 日期函数的摘要,您可以在其中阅读此答案中的功能。

祝你好运!

关于MySQL Select rows <= now(),使用分隔的时间字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8904122/

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