我有一个数据类型为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()
。
答案 0 :(得分:2)
您的查询返回false
,因为CURDATE()
返回的日期不是日期和时间。在与日期和时间进行比较时,只返回日期即表示2012-01-10 00:00:00
。因此CURDATE()
不在2013-01-10 05:10:50
之前。
我建议您使用NOW()
- 这会返回日期和时间。
答案 1 :(得分:2)
CURDATE()
不包含时间,因此它将在第9个/第10个边界的00:00:00或午夜。如果您要执行此操作,请使用NOW()
代替
答案 2 :(得分: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;
答案 3 :(得分:0)
使用now()
代替curdate()
。
now()
会返回当前日期和时间,而curdate()
会返回当前日期,该日期会转换为比赛时间,并且会在{{1 }}
答案 4 :(得分:0)
你必须使用now()或current_timestamp