SQL日期格式和引用混淆

时间:2014-12-22 15:14:19

标签: mysql sql datetime

我有以下测试记录:

enter image description here

以下查询会产生0条记录:

SELECT * FROM `events_dates` WHERE `start_date` = 21-12-2014

但是以下查询会产生1条记录:

SELECT * FROM `events_dates` WHERE `start_date` > 21-12-2014

我对此感到有点困惑。

作为一个附带问题:如果我不使用时间字段,是否可以使用'日期'类型,或者您仍然宁愿选择使用'日期时间'?

2 个答案:

答案 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_dateDATETIME列,则同一查询可以使用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'

虽然引号日期字段带有(“或')