SQL и сравнение даты - PullRequest
       3

SQL и сравнение даты

2 голосов
/ 18 сентября 2011

У меня есть заявление sql, я выбираю несколько элементов, но мне нужно убедиться, что дата, которую я сохранил, больше текущей даты.

SELECT * FROM table WHERE column_date > current_date

Как мне сделать код, работающий?

Дата столбца сохраняется таким образом: 0000-00-00 00:00:00 (обычное сохранение, другими словами).


Это то, чего я пытаюсь достичь: И время> текущая дата ИЛИ время == NULL Но это не работает. Столбец времени в настоящее время 0000-00-00 00:00:00, который равен NULL, верно?

Или как мне это сделать, оно должно быть больше или равно 0000-00-00 00: 00: 00

Ответы [ 3 ]

2 голосов
/ 18 сентября 2011

Если вы используете MySQL, NOW() должен добиться цели.

SELECT * FROM table WHERE column_date > NOW()

Если вы хотите исключить значение времени и просто сравнить со значением даты, можно использовать следующее:

SELECT * FROM table WHERE column_date > CURDATE()
1 голос
/ 18 сентября 2011

Вы можете использовать функцию Mysql NOW():

SELECT * FROM table WHERE column_date > NOW()
0 голосов
/ 19 сентября 2011

Согласно этой статье документации , 0000-00-00 является "фиктивной датой", которую можно использовать вместо NULL, что означает, что 0000-00-00 само по себе не NULL.

Учитывая, что 0000-00-00 не может быть больше любой другой даты, вы должны использовать либо условие с OR:

SELECT * FROM table WHERE column_date > NOW() OR column_date = '0000-00-00'

, либо объединение:

SELECT * FROM table WHERE column_date > NOW()
UNION ALL
SELECT * FROM table WHERE column_date = '0000-00-00'

В качестве альтернативы вы могли бы использовать такую ​​конструкцию:

SELECT *
FROM table
WHERE IFNULL(NULLIF(column_name, '0000-00-00'), '9999-12-31') > NOW()

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...