MySQL ВНУТРИ без условий

0

Я хочу написать 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, поэтому я попробовал это? Любой совет будет очень полезен.

Я не знаю, как я пытаюсь это правильно или неправильно, но я не могу изменить идентификатор запроса, значение даты не назначено.

  • 1
    Вероятно, лучше всего сделать параметр обнуляемым, выполнить оператор if и разделить ваш запрос. Будет намного легче читать и не слишком много дополнительного кода.
  • 0
    Я хотел бы знать, есть ли другой способ, кроме изменения запроса .. Я ищу изменение переменной, то есть только между значениями.
Показать ещё 1 комментарий
Теги:
database
logic

3 ответа

2
Лучший ответ

Вы можете использовать значения 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'.

  • 1
    Ваш совет сработал! Спасибо большое!
  • 1
    @ TomPHP Вы более чем приветствуем :)
1

Вы можете использовать функцию IFNULL

IFNULL(mindate, '1000-01-01');

Проблема с этим - вам нужно знать свой диапазон дат, чтобы вы могли правильно добавить минимальное и максимальное значения. Это предполагает, что вы проходите или создаете переменную под названием mindate.

  • 0
    Дата и время изменятся!
1

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

  • 0
    Спасибо за вашу помощь.!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню