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

标签 mysql time

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

相关文章:

mysql - 将一行变成多行

java - Spring JPA 多对多持久性问题

grails - 格式化时间

c++ - 如何知道计算c++中算法的执行时间?

go - 按时间四舍五入到特定时间间隔

java - 将长时差转换为格式 HH :mm [Java]

php - 单击按钮时如何显示文本字段?

mysql 加入多个条件(不是 OR 而是 AND)

php - mysql语句错误

time - 使用宏定义计算 10 个复活节相关日期的函数