PostgreSQL: выберите данные с полем like on timestamp

Я пытаюсь выбрать данные из таблицы, используя " like "в поле даты" date_checked " (отметка времени). Но у меня есть эта ошибка :

SQLSTATE[42883]: Undefined function: 7 ERROR:  operator does not exist: timestamp without time zone

мой запрос :

SELECT my_table.id
FROM my_table
WHERE my_table.date_checker LIKE '2011-01-%'

Я не хочу использовать :

SELECT my_table.id
FROM my_table
WHERE my_table.date_checker >= '2011-01-01 00:00:00' 
    AND  my_table.date_checker < '2011-02-01 00:00:00'

4 ответов


это все очень хорошо, не "желая использовать" с метками времени, но эти операторы могут быть преобразованы в индексные проверки и совпадение строк... ну, может быть, но ...

ну, ошибка возникает, потому что вам нужно явно преобразовать метку времени в строку перед использованием Строковой операции на ней, например:

date_checker::text LIKE '2011-01-%'

и предположим затем вы можете создать индекс на (date_checker::text) и это выражение станет индексным сканированием, но.... Фуууу.


возможно date_trunc функция будет больше по вашему вкусу:

... WHERE date_trunc('month', my_table.date_checker) = '2011-01-01'

вы также можете поместить индекс в это выражение, если это необходимо.


Если вам нужно сделать сравнение на какой-то части timestamp, гораздо лучше использовать EXTRACT()


Я не верю, что вы можете сделать like в столбце даты без преобразования его сначала в строковое представление.

вы можете использовать запрос between для выбора между двумя датами, например:

SELECT id FROM my_table WHERE date_checker BETWEEN '2011-01-01' AND '2011-02-01';