Postgresql - выберите что-то, где дата = "01/01/11"
У меня есть поле datetime в моем Postgresql, которое называется "dt".
Я хотел бы сделать что-то вроде
SELECT * FROM myTable WHERE extract (date from dt) = '01/01/11'
Каков правильный синтаксис для этого?
Спасибо!
Ответы
Ответ 1
Я думаю, что вы хотите отдать dt
в date
и исправить формат вашего литерала даты:
SELECT *
FROM table
WHERE dt::date = '2011-01-01' -- This should be ISO-8601 format, YYYY-MM-DD
Или стандартная версия:
SELECT *
FROM table
WHERE CAST(dt AS DATE) = '2011-01-01' -- This should be ISO-8601 format, YYYY-MM-DD
Функция extract
не понимает "дату" и возвращает число.
Ответ 2
В PostgreSQL имеется ряд доступных функций даты/времени, см. здесь.
В вашем примере вы можете использовать:
SELECT * FROM myTable WHERE date_trunc('day', dt) = 'YYYY-MM-DD';
Если вы регулярно выполняете этот запрос, можно создать индекс, используя также функцию date_trunc
:
CREATE INDEX date_trunc_dt_idx ON myTable ( date_trunc('day', dt) );
Одно из преимуществ этого заключается в большей гибкости при использовании часовых поясов, если это необходимо, например:
CREATE INDEX date_trunc_dt_idx ON myTable ( date_trunc('day', dt at time zone 'Australia/Sydney') );
SELECT * FROM myTable WHERE date_trunc('day', dt at time zone 'Australia/Sydney') = 'YYYY-MM-DD';