【问题标题】:Comapring DATE_ADD with NOW not working on MySQL比较 DATE_ADD 和 NOW 在 MySQL 上不起作用
【发布时间】:2020-04-09 13:12:59
【问题描述】:

我尝试在MySQL 中比较DateTime

该表用于检查锁定的用户。例如,用户将在日期时间2020-04-09 14:51:32 锁定1 Day

SELECT
    *,
    DATE_ADD(`time_created`, INTERVAL `locked_time` DAY) AS `until`
FROM
    `' . DATABASE_PREFIX . 'users_locked`
WHERE
    `user_id`=:user_id
LIMIT 1

until 是日期时间time_created 加上来自locked_time 的天数。

以下是参赛结果:

object(stdClass)[53]
  public 'id' => string '1'
  public 'user_id' => string '2'
  public 'locked_by' => string '1'
  public 'time_created' => string '2020-04-09 14:51:32'
  public 'locked_time' => string '1'
  public 'reason' => string 'This is a test'
  public 'until' => string '2020-04-10 14:51:32'

计算(time_created 加上locked_time 和结果2020-04-10 14:51:32)是正确的。但是当我尝试将此值与当前时间戳(如NOW())进行比较时,没有可用的结果 - 无论我使用>= 还是<=

[...]
WHERE
    `user_id`=:user_id
AND
    `until`<=NOW()
LIMIT 1
[...]
WHERE
    `user_id`=:user_id
AND
    `until`>=NOW()
LIMIT 1

如何检查“NOW()”中的日期是否为“直到”?

【问题讨论】:

    标签: mysql sql date datetime where-clause


    【解决方案1】:

    SELECT 子句中定义的表达式在WHERE 子句中不可用(后者在前者之前进行评估)。您需要重复该表达式:

    SELECT
        *,
        DATE_ADD(`time_created`, INTERVAL `locked_time` DAY) AS `until`
    FROM
        `' . DATABASE_PREFIX . 'users_locked`
    WHERE
        `user_id`=:user_id
         AND DATE_ADD(`time_created`, INTERVAL `locked_time` DAY) >= NOW()
    LIMIT 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 2017-04-07
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 2018-01-26
      相关资源
      最近更新 更多