【问题标题】:Suggest appropriate mysql date function建议合适的mysql日期函数
【发布时间】:2012-12-24 14:45:38
【问题描述】:

我有一个数据类型为 datetime 的日期字段,即使存储了 H:s:i,但我不想在验证中考虑到我在查询条件下使用 CURDATE() 但“ H:S:i' 正在考虑,例如

SELECT ('2013-01-10 05:10:50' <= CURDATE()) FROM dual

上面的查询返回 false(0),为什么不返回 true(1),因为 2013-01-10 05:10:50 是过去的时间。简而言之,我想存储 'H:s:i' 但在验证哪个 MySql 函数适合时不应该考虑?

更新以下内容

我不想使用NOW()SYSDATE(),因为这些函数在验证时会考虑H:s:i,所以我使用了CURDATE(),但是当我使用CURDATE() 时,预期的结果会有所不同。

【问题讨论】:

  • CURDATE() 返回 '2013-01-10'

标签: mysql sql datetime select


【解决方案1】:

你可以试试这个:

SELECT DATE('2013-01-10 05:10:50') <= CURDATE() FROM DUAL;

SELECT '2013-01-10 05:10:50' <= DATE_FORMAT(NOW(), '%Y-%m-%d 23:59:59') FROM DUAL;

【讨论】:

  • 感谢您的回复,当我使用双表时,上面的查询会很好,假设我有`select * from table_name where date_field1
  • 您可以轻松做到这一点。 SELECT * FROM table_name WHERE DATE(date_field1)
  • 感谢它的返回预期输出,如果有其他选择,那么建议我。
【解决方案2】:

使用now() 代替curdate()

now() 返回当前日期和时间,而curdate() 返回当前日期,该日期被转换为日期时间以进行比较,如果00:00:00 则管理时间组件

【讨论】:

    【解决方案3】:

    你必须使用 now() 或 current_timestamp

    【讨论】:

      【解决方案4】:

      CURDATE() 不包括时间,因此它将是 00:00:00 或 9th/10th 边界的午夜。如果您想进行此检查,请改用NOW()

      【讨论】:

        【解决方案5】:

        您的查询返回false,因为CURDATE() 返回一个日期,而不是日期和时间。与日期和时间进行比较时,仅返回日期意味着 2012-01-10 00:00:00。因此CURDATE() 不在2013-01-10 05:10:50 之前。

        我建议您使用 NOW() - 它会返回日期和时间。

        Docs for NOW() here

        【讨论】:

          猜你喜欢
          • 2023-03-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多