我有一个包含日期 (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/