有没有比这更好的方法来选择空的日期时间字段?
SELECT * FROM `table` WHERE `datetime_field` = '0000-00-00 00:00:00'
paxdiablo.. 41
更好的方式?那个查询可以完成你所要求的一切,只要有一个索引datetime_field
,它就会得到它的速度.
如果您担心查询看起来"丑陋",请不要.它的意图非常明确.
您可以考虑的唯一可能的改进是对这些零日期/时间行使用NULL,在这种情况下,您的查询变为:
SELECT * FROM `table` WHERE `datetime_field` IS NULL
这就是我对符合标准的DBMS所做的.我的理解是,MySQL 可能以这种可怕的方式表示真正的NULL日期时间字段,在这种情况下,我猜这IS NULL
可能不起作用.
更好的方式?那个查询可以完成你所要求的一切,只要有一个索引datetime_field
,它就会得到它的速度.
如果您担心查询看起来"丑陋",请不要.它的意图非常明确.
您可以考虑的唯一可能的改进是对这些零日期/时间行使用NULL,在这种情况下,您的查询变为:
SELECT * FROM `table` WHERE `datetime_field` IS NULL
这就是我对符合标准的DBMS所做的.我的理解是,MySQL 可能以这种可怕的方式表示真正的NULL日期时间字段,在这种情况下,我猜这IS NULL
可能不起作用.
SELECT * FROM db.table WHERE UNIX_TIMESTAMP(datetime_field) = 0
I like this code because it not only catches "zero dates" (e.g. '0000-00-00 00:00:00') is also catches "zeroes in dates" (e.g. '2010-01-00 00:00:00')
如果您的日期/日期时间列不是NULL,您可以使用:
SELECT * FROM `table` WHERE `datetime_field` IS NULL
MySQL将为您选择等于'0000-00-00 00:00:00'的列.
注意:如果你这样做:
SELECT `datetime_field` IS NULL
MySQL将返回0(false),但当用作WHERE子句的一部分时,此语句将为true.
对于声明为NOT NULL的DATE和DATETIME列,您可以使用如下语句找到特殊日期'0000-00-00':
SELECT * FROM tbl_name WHERE date_column IS NULL这是使一些ODBC应用程序工作所必需的,因为ODBC不支持'0000-00-00'日期值.
或者你可以简单地做:
SELECT * FROM `table` WHERE `datetime_field` = 0
我用这个:
SELECT * FROM `table` WHERE UNIX_TIMESTAMP(`datetime_field`) = 0