SQL日期格式和引用混淆

Tra*_*ace 3 mysql sql datetime

我有以下测试记录:

在此输入图像描述

以下查询结果为0条记录:

SELECT * FROM `events_dates` WHERE `start_date` = 21-12-2014
Run Code Online (Sandbox Code Playgroud)

但以下查询结果为1条记录:

SELECT * FROM `events_dates` WHERE `start_date` > 21-12-2014
Run Code Online (Sandbox Code Playgroud)

我有点困惑.

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

Mic*_*ski 7

您必须以格式单引引日期文字'YYYY-MM-DD'.否则,MySQL解释的是算术表达式(整数减法):

21 - 12 - 2014 = -2005
Run Code Online (Sandbox Code Playgroud)

负整数-2005被有效地转换为日期值0000-00-00 00:00:00,这解释了为什么您的查询>返回一行.

正确的SQL表达式是:

SELECT * FROM `events_dates` WHERE `start_date` = '2014-12-21'
Run Code Online (Sandbox Code Playgroud)

关于使用该DATE类型而不是DATETIME,是的,我认为如果你知道你从不打算使用时间,可以在没有时间部分的情况下使用它.我承认,在大多数情况下,我确实将其DATETIME用于未来的可扩展性.这真的取决于你未来的需求.

如果关注的是存储空间的优化以避免存储时间DATETIME,请考虑在担心优化存储空间之前,这个表有多大的潜力增长(它必须非常重要).如果您确实使用DATETIME,您可能会发现自己经常使用该DATE()函数在查询时截断值.我认为这只是一个非常小的不便.

如果列start_date是相同的查询DATETIME可以DATE()用来截断时间段:

SELECT * FROM `events_dates` WHERE DATE(`start_date`) = '2014-12-21'
Run Code Online (Sandbox Code Playgroud)