Выбор пустых полей даты и времени mysql - PullRequest
27 голосов
/ 18 февраля 2009

Есть ли лучший способ выбрать пустые поля даты и времени, чем этот?

SELECT * FROM `table` WHERE `datetime_field` = '0000-00-00 00:00:00'

Ответы [ 7 ]

40 голосов
/ 18 февраля 2009

Лучше, чем? Этот запрос выполняет все, о чем вы просите, и, если есть индекс на datetime_field, он выполняется так же быстро, как и собирается.

Если вы беспокоитесь о том, что запрос выглядит "безобразно", не беспокойтесь. Его цель совершенно ясна.

Единственное возможное улучшение, которое вы могли бы рассмотреть, - это использовать значения NULL для этих строк с нулевой датой / временем, и в этом случае ваш запрос становится:

SELECT * FROM `table` WHERE `datetime_field` IS NULL

Именно так я бы поступил со СУБД, соответствующей стандартам. Насколько я понимаю, MySQL может представлять истинные NULL поля даты и времени таким ужасным образом, и в этом случае я предполагаю, что IS NULL может не работать.

26 голосов
/ 22 июля 2010

SELECT * FROM db.table WHERE UNIX_TIMESTAMP(datetime_field) = 0

Мне нравится этот код, потому что он не только ловит «ноль дат» (например, «0000-00-00 00:00:00»), но также ловит «ноль дат» (например, «2010-01-00 00:00»). : 00' )

16 голосов
/ 21 марта 2013

Если ваш столбец даты / даты и времени НЕ НЕДЕЙСТВИТЕЛЕН, вы можете просто использовать:

SELECT * FROM `table` WHERE `datetime_field` IS NULL

MySQL выберет для вас столбцы, равные «0000-00-00 00:00:00».

Примечание : Если вы делаете:

SELECT `datetime_field` IS NULL

MySQL вернет 0 (false), но это утверждение будет истинным, если используется как часть предложения WHERE.

Из руководства

Для столбцов DATE и DATETIME, которые объявлены как NOT NULL, вы можете найти специальную дату '0000-00-00' с помощью следующего выражения:

SELECT * FROM tbl_name WHERE date_column IS NULL

Это необходимо для работы некоторых приложений ODBC, поскольку ODBC не поддерживает значение даты «0000-00-00».

7 голосов
/ 13 июня 2014

Или вы можете просто сделать:

SELECT * FROM `table` WHERE `datetime_field` = 0
5 голосов
/ 27 февраля 2009

Я использую это:

SELECT * FROM `table` WHERE UNIX_TIMESTAMP(`datetime_field`) = 0
2 голосов
/ 13 июня 2014

В качестве другого варианта я видел:

SELECT * FROM `table` WHERE YEAR(`datetime_field`)=0
0 голосов
/ 18 февраля 2009

Позвольте мне высказать заявление об отказе от ответственности, я не уверен, что это будет делать. Но было бы здорово, если бы это сработало.

SELECT * FROM table WHERE datetime = DATESUB(NOW(),NOW());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...