我有以下测试记录:
以下查询会产生0条记录:
SELECT * FROM `events_dates` WHERE `start_date` = 21-12-2014
但是以下查询会产生1条记录:
SELECT * FROM `events_dates` WHERE `start_date` > 21-12-2014
我对此感到有点困惑。
作为一个附带问题:如果我不使用时间字段,是否可以使用'日期'类型,或者您仍然宁愿选择使用'日期时间'?
答案 0 :(得分:7)
您必须以'YYYY-MM-DD'
格式单引号引用日期文字。否则,MySQL正在解释的是算术表达式(整数减法):
21 - 12 - 2014 = -2005
负整数-2005
会转换为有效0000-00-00 00:00:00
的日期值,这解释了为什么>
的查询会返回一行。
正确的SQL表达式是:
SELECT * FROM `events_dates` WHERE `start_date` = '2014-12-21'
关于DATE
类型而不是DATETIME
的使用,是的,如果您知道自己从未打算使用时间,我认为可以在没有时间部分的情况下使用它。但我承认,在大多数情况下,我确实使用DATETIME
来实现未来的可扩展性。这实际上取决于您未来的需求。
如果关注的是优化存储空间以避免将时间与DATETIME
一起存储,请考虑在担心优化之前该表有多大的潜力增长(它必须是真的很重要很重要。如果您确实使用DATETIME
,您可能会发现自己经常使用DATE()
函数在查询时截断值。我认为这只是一个非常小的不便。
如果start_date
为DATETIME
列,则同一查询可以使用DATE()
截断时间段:
SELECT * FROM `events_dates` WHERE DATE(`start_date`) = '2014-12-21'
答案 1 :(得分:1)
MySql日期字段仅支持YYYY-MM-DD
日期格式,此查询为您提供正确的结果
SELECT * FROM `events_dates` WHERE `start_date` > '2014-12-21'
虽然引号日期字段带有(“或')