gpt4 book ai didi

mysql - 从 now() 到日期字段的隐式转换

转载 作者:行者123 更新时间:2023-11-29 04:59:40 25 4
gpt4 key购买 nike

我对 MySQL 5.1 有疑问。日期时间数据类型不会隐式转换为匹配日期列。

 SELECT * FROM my_table WHERE my_date_field = NOW()

此请求不返回任何使用 MySQL 5.1 的行,但适用于 5.0 版。如果我们使用 CURDATE() 而不是 NOW() 它在 MySQL 5.0 和 MySQL 5.1 中都有效。如果转换是显式的 (CAST(NOW() AS DATE)),它也适用于 MySQL 5.0 和 MySQL 5.1。

问题只出现在从 datetime 到 date 的隐式转换中。难道没有人已经遇到过这个问题或知道如何解决这个问题吗?我知道使用 NOW() 而不是 CURTIME() 不是最好的,但这不是这里的问题。目前在应用程序中使用它,目的是避免重写所有内容。

谢谢!

最佳答案

这已在 MySQL 5.1.17 中修复允许 CURDATE() 在存储在 DATE 列中时评估为小于 NOW()。

现在,将 DATE 与 DATETIME 进行比较时,会将它们作为 DATETIME 进行比较。当 DATE 转换为 DATETIME 时,它的小时数为零。

如果 my_date_field'2010-01-01' 并且 NOW()'2010-01-01 05: 01:01',比较时,my_date_field提升为'2010-01-01 00:00:00',明显小于'2010-01-01 05:01:01'

本来左边是一列的时候,并没有发生从DATE到DATETIME的提升。但是,显然他们认为始终推广它更为一致。

抱歉,您只是很幸运,它以前有效。具有零小时的日期应评估为小于具有非零小时的同一日期。

不幸的是,没有办法关闭这个“错误修复”。您唯一的解决方案是将 NOW() 更改为 CURDATE() 或回滚到以前的版本。

实际上,您可以编译自己的版本并撤消“错误修复”或覆盖 NOW() 函数。

关于mysql - 从 now() 到日期字段的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2723466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com