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 - необязательные значения даты будут работать как условия

Другие вопросы по тегам