Есть ли лучший способ выбрать пустое поля datetime, чем это?
SELECT * FROM `table` WHERE `datetime_field` = '0000-00-00 00:00:00'
Есть ли лучший способ выбрать пустое поля datetime, чем это?
SELECT * FROM `table` WHERE `datetime_field` = '0000-00-00 00:00:00'
Лучше, каким образом? Этот запрос делает все, что вы просите об этом, и при наличии индекса на datetime_field
, он так же быстро, как и будет.
Если вы беспокоитесь о том, что запрос выглядит "уродливым", не надо. Его намерение совершенно ясно.
Единственное возможное улучшение, которое вы могли бы рассмотреть, - использовать NULL для этих строк с нулевой датой/временем, и в этом случае ваш запрос будет выглядеть следующим образом:
SELECT * FROM `table` WHERE `datetime_field` IS NULL
Что я буду делать со стандартами, совместимыми с СУБД. Я понимаю, что MySQL может представлять истинные поля NULL datetime этим ужасным образом, и в этом случае я думаю, что IS NULL
может не работать.
SELECT * FROM db.table WHERE UNIX_TIMESTAMP(datetime_field) = 0
Мне нравится этот код, потому что он не только ловит "нулевые даты" (например, "0000-00-00 00:00:00" ), но также ловит "нули в датах" (например, "2010-01-00 00:00": 00' )
Если ваш столбец 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.
Я использую это:
SELECT * FROM `table` WHERE UNIX_TIMESTAMP(`datetime_field`) = 0
Или вы можете просто сделать:
SELECT * FROM `table` WHERE `datetime_field` = 0
Как еще один вариант, я видел:
SELECT * FROM `table` WHERE YEAR(`datetime_field`)=0
Позвольте мне выразить отказ, я не уверен, что это будет делать. Но было бы здорово, если бы это сработало.
SELECT * FROM table WHERE datetime = DATESUB(NOW(),NOW());