Postgresql - выберите что-то, где date = "01/01/11" - PullRequest
34 голосов
/ 04 мая 2011

В моем Postgresql есть поле даты и времени с именем "dt". Я хотел бы сделать что-то вроде

SELECT * FROM myTable WHERE extract (date from dt) = '01/01/11'

Каков правильный синтаксис для этого?

Спасибо!

Ответы [ 2 ]

71 голосов
/ 04 мая 2011

Я думаю, что вы хотите привести 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 не понимает «дату» и возвращает число.

4 голосов
/ 14 ноября 2017

В 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';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...