SELECT * FROM table WHERE '2016-03-31' > (SELECT MAX(year) from table where bill_id = 'somevalue')
我使用上面的查询来检查 2016-03-31 是否大于表中针对 bill_id 的所有年份。它运行良好。但这是比较日期的正确方法吗?日期将始终采用上述格式。是否需要转换日期格式进行比较。值 2016-03-31 将动态更改,但始终采用 Y-m-d 格式
注意:年份是列名称,其中包含 Y-m-d 格式的完整日期,例如 2016-05-20
最佳答案
您没有比较日期。您正在将字符串 '2016-03-31'
与数字进行比较,例如2015
。
为了进行比较,MySQL 会默默地将字符串转换为数字。人们会认为这会崩溃,因为 '2016-03-31'
当然不是一个数字。然而,MySQL 是从左到右读取的,并从中获取所有可以被视为数字的内容,即 '2016'
。好吧,有人可能会说有些人在数字末尾加了一个减号,所以这应该是 '2016-'
,即 -2016
。无论如何,MySQL 在减号之前停止,获取 2016
并使用它进行比较。
我不知道这一切是否能保证在未来发挥作用。我不会依赖这个。
无论如何,您期望什么结果? 2016年3月31日比2016年大吗?这是一个奇怪的问题,你不觉得吗?
关于mysql - 比较 mysql 中的日期是否需要格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44715607/