2016-05-13 2 views
-3

У меня есть два запроса. Ошибок в этих запросах не так.Почему разные результаты с помощью запросов Mysql

Запрос 1

SELECT * FROM notices 
WHERE CURDATE() < end_date 
OR end_date = NULL 
ORDER BY id 

Результат запроса One:

enter image description here

Запрос 2

select * from notices 
where CURDATE() < end_date or end_date='0000-00-00' 
order by id 

Результат запроса Два:

enter image description here

Структура таблицы

enter image description here

Вопрос

Мой вопрос заключается в том, что почему запрос не 1 показывая те же результаты, что и запрос 2?

+1

По существу, вы спрашиваете, почему два разных запросов дают разные результаты :) В первом запросе, вы проверяете, если end_date является NULL конкретно, в то время как второй проверки, если end_date также равным '0000-00-00'. –

+0

Но когда я вставляю, я использую 'NULL' для даты окончания, тогда он сохраняет' 0000-00-00'. Поэтому в соответствии с этим я говорю, что во время выбора почему он не работает с 'NULL' –

+0

Теперь это звучит так, как в столбце end_date содержится' NOT NULL DEFAULT '0000-00-00'' в его определении. Это означало бы, что, когда строка будет вставлена ​​в базу данных, если «end_date» отсутствует, на его месте будет использоваться «0000-00-00». Пожалуйста, обновите свой вопрос своей схемой таблицы –

ответ

1

Поскольку NULL не то же самое, как "0000-00-00"

PD: Если вы хотите установить, где положение и выбрать, где поле равно нулю, вы должны использовать "WHERE end_date IS NULL", не «WHERE end_date = NULL»

+0

Если это не то же самое, то почему он сохраняет NULL как '0000-00-00'? –

+0

@HamzaZafeer, тогда вы, вероятно, сберете NULL неправильно, покажите нам этот код. Или проверьте этот пример http://sqlfiddle.com/#!9/4bf612/1 –

+0

Ваш столбец end_date не может быть нулевым. Ваш ORM или что-то еще должно сохранять значение по умолчанию вместо NULL – Borjante

0

По моему пониманию NULL отличается от 0000-00-00 для типа Date. Некоторые разработчики используют 0000-00-00 в качестве значения по умолчанию. Поскольку и NULL, и 0000-00-00 отличаются друг от друга, вы видите два разных набора результатов.

Проверить это default date '0000-00-00 00:00:00' or null

Смежные вопросы