选择空的mysql datetime字段

Cal*_*lum 28 php mysql datetime

有没有比这更好的方法来选择空的日期时间字段?

SELECT * FROM `table` WHERE `datetime_field` = '0000-00-00 00:00:00'
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 41

更好的方式?那个查询可以完成你所要求的一切,只要有一个索引datetime_field,它就会得到它的速度.

如果您担心查询看起来"丑陋",请不要.它的意图非常明确.

您可以考虑的唯一可能的改进是对这些零日期/时间行使用NULL,在这种情况下,您的查询变为:

SELECT * FROM `table` WHERE `datetime_field` IS NULL
Run Code Online (Sandbox Code Playgroud)

这就是我对符合标准的DBMS所做的.我的理解是,MySQL 可能以这种可怕的方式表示真正的NULL日期时间字段,在这种情况下,我猜这IS NULL可能不起作用.


Orl*_*teo 27

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')


小智 18

如果您的日期/日期时间列不是NULL,您可以使用:

SELECT * FROM `table` WHERE `datetime_field` IS NULL
Run Code Online (Sandbox Code Playgroud)

MySQL将为您选择等于'0000-00-00 00:00:00'的列.

注意:如果你这样做:

SELECT `datetime_field` IS NULL
Run Code Online (Sandbox Code Playgroud)

MySQL将返回0(false),但当用作WHERE子句的一部分时,此语句将为true.

手册

对于声明为NOT NULL的DATE和DATETIME列,您可以使用如下语句找到特殊日期'0000-00-00':

SELECT * FROM tbl_name WHERE date_column IS NULL
Run Code Online (Sandbox Code Playgroud)

这是使一些ODBC应用程序工作所必需的,因为ODBC不支持'0000-00-00'日期值.


olv*_*lvl 8

或者你可以简单地做:

SELECT * FROM `table` WHERE `datetime_field` = 0
Run Code Online (Sandbox Code Playgroud)


小智 6

我用这个:

SELECT * FROM `table` WHERE UNIX_TIMESTAMP(`datetime_field`) = 0
Run Code Online (Sandbox Code Playgroud)