2016-09-15 3 views
1

У меня есть вход для поиска какой даты, чтобы показать, вход может быть форматом даты (yyyy или yyyy-mm или yyyy-mm-dd), как '2006' или '2017-01' или «2008-10-10», я использую запрос, как этотPostgreSQL SELECT LIKE datetime

SELECT * FROM MEMBER WHERE UPPER(join_date) LIKE UPPER(%".$input."%); 

но результат пуст, есть способ, чтобы правильно использовать как заявление для DateTime в PostgreSQL

+1

Вы запустили этот запрос в psql cli? Почему в конце появляется блуждающая двойная кавычка? Почему вы используете 'UPPER', если в поле даты нет текста? Почему вы выбрали тег mysqli, когда речь идет о psql? – Paul

ответ

0
LIKE

для строк, а не для DATE значений. Это означает, что вы должны сначала преобразовать дату в правильно отформатированное значение строки:

SELECT * 
FROM member 
WHERE to_char(join_date, 'YYYY-MM-DD') LIKE '%.... %'; 

Использование upper(join_date) подлежит лукавое неявное преобразование типов данных и не будет работать надежно.

Также: upper() на строке с номерами на самом деле не имеет смысла.