mrusklon
@mrusklon
Не получается? Яростно гугли!

Как доработать запрос mysql чтоб он не смотрел на даты 0000-00-00?

написал такой запрос
SELECT * FROM table WHERE lvl=1 AND exp_date >= CURDATE()

только в таблице по умолчанию ставится дата 0000-00-00 , а значит все эти даты не будут отображены , а надо наоборот , чтоб это было как бесконечность , подскажите как сделать?
  • Вопрос задан
  • 81 просмотр
Решения вопроса 3
kagary06
@kagary06
Человек
Если в вашем случае значение "0000-00-00" имеет некоторый логический смысл, то вы можете изменить вывод результата запроса для значения "0000-00-00" на символ бесконечности при помощи оператора CASE Документация

Вот пример использования данного оператора на основе вашего запроса:
SELECT CASE exp_date WHEN '0000-00-00' THEN '∞' ELSE exp_date END AS exp_date 
FROM ? 
WHERE lvl = 1


Но будьте осторожны, так как согласно документации допустимыми значения для поля DATE являются значения от '1000-01-01' до '9999-12-31'.
Вариант использования '0000-00-00' является исключением известным как "нулевая дата" и строго не рекомендуется к сознательному использованию в качестве допустимого значения.

Так например все значения, которые при вставке имеют неправильный формат даты в случае установленного режима ALLOW_INVALID_DATES будет конвертировать все некорректные даты в значение "0000-00-00".
Также мне известно, что в случае использования ODBC-драйвера, то он не поддерживает некорректные значения даты (только от '1000-01-01' до '9999-12-31') и может по-другомувести себя с такой ситуации.

Вот выдержка из документации:

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

SELECT * FROM tbl_name WHERE date_column IS NULL
Это необходимо для работы некоторых приложений ODBC, поскольку ODBC не поддерживает значение даты 0000-00-00.


Поэтому настоятельно рекомендую либо прислушайтесь к совету Иван,
либо же выберите некоторые дату из допустимого диапазона значений, которая будет обозначать "бесконечность" или иной смысл для решения вашей задачи.
Ответ написан
Комментировать
@Ant1gen
Если нужно просто добавить в выборку exp_date со стандартным значением 0000-00-00, почему бы просто не добавить OR в условия? (возможно не правильно понял вопрос, т.к. тема и текст выглядят противоположными)

SELECT * FROM table WHERE lvl=1 AND (exp_date >= CURDATE() OR exp_date ='0000-00-00')
Ответ написан
Комментировать
mrusklon
@mrusklon Автор вопроса
Не получается? Яростно гугли!
и плюс еще посоветовали просто поставить по умолчанию дату 9999-00-00
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы