PostgreSQL: работа с датой

Есть запрос:

select * from people
where date_birthday between '1982-01-10' and '1987-01-10';

Встал вопрос как его модифицировать и сделать универсальным если дата будет в формате dd-mm-yyyy, пытаюсь сделать через функцию to_char, т.е.:

select * from people
where date_birthday
between 
(to_char(date_birthday ,'DD-MM-YYYY') = '1982-01-10') 
and 
(to_char(date_birthday ,'DD-MM-YYYY') = '1987-01-10');

Но в результате получаю пустой набор. В чем моя ошибка и какую лучше функцию для работы с датой в данной ситуации нужно использовать?


Ответы (1 шт):

Автор решения: Ainar-G

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

SELECT *
  FROM people
 WHERE date_birthday
       BETWEEN to_timestamp('10-01-1982', 'DD-MM-YYYY')
           AND to_timestamp('10-01-1987', 'DD-MM-YYYY')
;
→ Ссылка