建议合适的mysql日期函数

Posted

技术标签:

【中文标题】建议合适的mysql日期函数【英文标题】:Suggest appropriate mysql date function 【发布时间】: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' 【参考方案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

【讨论】:

以上是关于建议合适的mysql日期函数的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 设计数据表时,时间类型 datetimebiginttimestamp MySQL日期函数

MySQL 设计数据表时,时间类型 datetimebiginttimestamp MySQL日期函数

mysql date函数怎么用

Mysql日期函数

mysql日期函数问题? FROM_UNIXTIME

Mysql日期转换函数时间转换函数