建议合适的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日期函数