Я хочу написать SQL-запрос, где, если datetime не назначено, я хочу заменить строку, которая может выбрать все дату и время.
Как на самом деле это работает:
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, поэтому я попробовал это? Любой совет будет очень полезен.
Я не знаю, как я пытаюсь это правильно или неправильно, но я не могу изменить идентификатор запроса, значение даты не назначено.
Вы можете использовать значения 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 - дополнительные значения даты будут работать как условия