MySQL ВНУТРИ без условий
Я хочу написать запрос SQL, где, если дата и время не назначены, я хочу заменить строку, которая может выбрать все дату и время.
Как на самом деле это работает:
SELECT * FROM `entry` WHERE `user` like 'TOM' or `user` like 'PHP'
and `entry_datetime` between '2013-03-13 22:20:18' and '2013-03-13 22:20:26'
Мое сомнение: если php не получает значение даты от и до, но я не хочу менять запрос, удаляя условие AND, но я хочу заменить что-то между датой и временем, и все же запрос должен выполняться:
SELECT * FROM `entry` WHERE `user` like 'TOM' or `user` like 'PHP' and
`entry_datetime` between ' ' and ' '
Я попробовал следующее, но это не работает? мы можем написать запрос как этот?
SELECT * FROM `entry` WHERE `user` like 'TOM' or `user` like 'PHP' and
`entry_datetime` between '%%' and '%%'
Я просто пытаюсь описать выше, как, потому что мы используем его в команде LIKE, поэтому я попробовал это? Любой совет будет очень полезным.
Я не знаю, правильно ли я пытаюсь, но я не могу изменить идентификатор запроса, если значение даты не назначено.
3 ответа
Вы можете использовать значения MIN и MAX для типа данных datetime.
... AND `entry_datetime` BETWEEN '1000-01-01 00:00:00' AND '9999-12-31 23:59:59'
Тип DATETIME используется для значений, которые содержат как дату, так и время. MySQL извлекает и отображает значения DATETIME в формате "ГГГГ-ММ-ДД ЧЧ: ММ: СС". Поддерживается диапазон от 1000-01-01 00:00:00 до 9999-12-31 23:59:59.
Вы могли бы использовать IFNULL
функция
IFNULL(mindate, '1000-01-01');
Проблема в том, что вам нужно знать диапазон дат, чтобы вы могли правильно добавить минимальное и максимальное значения. Это предполагает, что вы передаете или создаете переменную под названием mindate.
1)
SELECT *
FROM `entry`
WHERE `user` like 'TOM' or `user` like 'PHP'
and `entry_datetime`
between COALESCE('2013-03-13 22:20:18', '1000-01-01 00:00:00')
and COALESCE('2013-03-13 22:20:26', '9999-12-31 23:59:59');
2)
SELECT *
FROM `entry`
WHERE `user` like 'TOM' or `user` like 'PHP'
and `entry_datetime`
between COALESCE(NULL, '1000-01-01 00:00:00')
and COALESCE(NULL, '9999-12-31 23:59:59');
Если вы передадите NULL - необязательные значения даты будут работать как условия