Подтвердить что ты не робот

Выбор пустых полей datetime mysql

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

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

Ответ 1

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

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

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

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

Что я буду делать со стандартами, совместимыми с СУБД. Я понимаю, что MySQL может представлять истинные поля NULL datetime этим ужасным образом, и в этом случае я думаю, что IS NULL может не работать.

Ответ 2

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

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

Ответ 3

Если ваш столбец date/datetime не равен 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.

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

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

SELECT * FROM tbl_name WHERE date_column IS NULL

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

Ответ 4

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

SELECT * FROM `table` WHERE UNIX_TIMESTAMP(`datetime_field`) = 0

Ответ 5

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

SELECT * FROM `table` WHERE `datetime_field` = 0

Ответ 6

Как еще один вариант, я видел:

SELECT * FROM `table` WHERE YEAR(`datetime_field`)=0

Ответ 7

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

SELECT * FROM table WHERE datetime = DATESUB(NOW(),NOW());