4

我有一个数据类型的日期字段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()

4

5 回答 5

2

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

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

NOW()这里的文档

于 2013-01-10T09:07:35.997 回答
2

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

于 2013-01-10T09:08:40.797 回答
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;
于 2013-01-10T09:20:56.993 回答
0

使用now()而不是curdate().

now()返回当前日期和时间,而curdate()返回当前日期,该日期被强制转换为日期时间以进行比较,并在如果00:00:00

于 2013-01-10T09:09:54.823 回答
0

你必须使用 now() 或 current_timestamp

于 2013-01-10T09:12:00.440 回答