Подтвердить что ты не робот

PostgreSQL: введите строку на дату DD/MM/YYYY

Я пытаюсь привести столбец CHARACTER VARYING к DATE, но мне нужен такой формат даты: DD/MM/YYYY. Я использую следующий запрос SQL:

ALTER TABLE test 
ALTER COLUMN date TYPE DATE using to_date(date, 'DD/MM/YYYY');

В результате получается такая дата: YYYY-MM-DD.

Как я могу получить формат DD/MM/YYYY?

Заранее большое спасибо!

Томас

4b9b3361

Ответ 1

Столбец

A DATE не имеет формата. Вы не можете указать формат для него.

Вы можете использовать DateStyle для управления тем, как PostgreSQL испускает даты, но он глобальный и немного ограничен.

Вместо этого вы должны использовать to_char для форматирования даты при ее запросе или форматирования в клиентском приложении. Как:

SELECT to_char("date", 'DD/MM/YYYY') FROM mytable;

например.

regress=> SELECT to_char(DATE '2014-04-01', 'DD/MM/YYYY');
  to_char   
------------
 01/04/2014
(1 row)

Ответ 2

документация гласит

Формат вывода типов даты/времени может быть установлен на один из четырех стили ISO 8601, SQL (Ingres), традиционные POSTGRES (дата Unix) формат) или немецкий. По умолчанию используется формат ISO.

Так что этим конкретным форматом можно управлять с помощью вывода даты и времени postgres, например:

t=# select now();
              now
-------------------------------
 2017-11-29 09:15:25.348342+00
(1 row)

t=# set datestyle to DMY, SQL;
SET
t=# select now();
              now
-------------------------------
 29/11/2017 09:15:31.28477 UTC
(1 row)

t=# select now()::date;
    now
------------
 29/11/2017
(1 row)

Помните, что, как упомянул @Craig в своем ответе, изменение datestyle также (и в первую очередь) изменит способ синтаксического анализа даты postgres.