【问题标题】:Check if a date is upcoming or past in MySQL检查 MySQL 中的日期是即将到来还是过去
【发布时间】:2022-11-16 21:45:58
【问题描述】:

我在一个表中有两列

  • event_date(值为 09/22/2013)
  • event_time(值为晚上 7:11)

现在我想写一个查询,它应该返回有时间和日期的行未来或者过去的.

我写了这样的东西

SELECT *
FROM events e
WHERE CONCAT(e.event_date, ' ', e.event_time) <= DATE_FORMAT(NOW(), '%m/%d/%Y  %g:%i %a')

但它没有用,这只是你永远不知道它们出了什么问题的事情之一

提前致谢!

【问题讨论】:

  • 您已将日期作为文本存储在数据库中???
  • 使用 DATETIME 或 TIMESTAMP 数据类型存储日期/时间。

标签: mysql sql


【解决方案1】:
SELECT * 
FROM Events
WHERE event_date < CURRENT_DATE()
      OR (event_date = CURRENT_DATE() AND event_time <= CURRENT_TIME())
   

这具有使用任何指数可能存在于 event_date 上。

【讨论】:

    【解决方案2】:
    select * from events e where TIMESTAMP(e.event_date,e.event_time) <= NOW()
    

    【讨论】:

    • CURTIME() 返回 08:21:41 :) 你不能指望用它来检查日期,是吗?
    【解决方案3】:

    如果 event_dateevent_time 的值按照您显示的那样存储,则可能的解决方案

    选择过去的事件

    SELECT *
      FROM events
     WHERE STR_TO_DATE(CONCAT(event_date, ' ', event_time), '%m/%d/%Y %h:%i %p') < NOW()
    

    选择未来的事件

    SELECT *
      FROM events
     WHERE STR_TO_DATE(CONCAT(event_date, ' ', event_time), '%m/%d/%Y %h:%i %p') > NOW()
    

    这是SQLFiddle演示

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-26
      • 1970-01-01
      • 1970-01-01
      • 2014-02-12
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多