我有一个数据类型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()
时预期的结果是不同的。
您的查询返回false
,因为CURDATE()
返回日期而不是日期和时间。当与日期和时间进行比较时,仅返回日期意味着2012-01-10 00:00:00
。因此,CURDATE()
不在2013-01-10 05:10:50
之前。
我建议您使用NOW()
-它返回日期和时间。
NOW()
文档
CURDATE()
不包含时间,因此它将是第9/10号边界的00:00:00或午夜。如果你想这样做,请使用NOW()
你可以试试:
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;
您必须使用now()或current_timestamp
用now()
代替curdate()
now()
返回当前日期和时间,而如果00:00:00
curdate()
返回当前日期,该日期被转换为用于比较的日期时间,并且给定一个时间组件。