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';