web-dev-qa-db-ja.com

PostgreSQL:日付DD / MM / YYYYに文字列をキャストします

CHARACTER VARYING列を日付にキャストしようとしていますが、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形式を取得するにはどうすればよいですか?

事前に感謝します!

トーマス

32
wiltomap

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)
66
Craig Ringer

https://www.postgresql.org/docs/current/static/datatype-datetime.html#DATATYPE-DATETIME-OUTPUT

日付/時刻型の出力形式は、ISO 8601、SQL(Ingres)、従来のPOSTGRES(Unix日付形式)、またはドイツ語の4つのスタイルのいずれかに設定できます。デフォルトは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が日付を解析する方法も(そして最初に)変更されることに注意してください。

5
Vao Tsun