PostgreSQL:将字符串转换为日期DD/MM/YYYY

wil*_*map 35 string postgresql casting date

我正在尝试将一个CHARACTER VARYING列转换为DATE,但我需要一个这样的日期格式:DD/MM/YYYY.我使用以下SQL:

ALTER TABLE test 
ALTER COLUMN date TYPE DATE using to_date(date, 'DD/MM/YYYY');
Run Code Online (Sandbox Code Playgroud)

结果是这样的日期:YYYY-MM-DD.

如何获得DD/MM/YYYY格式?

非常感谢提前!

托马斯

Cra*_*ger 69

DATE列没有的格式.您无法为其指定格式.

您可以使用它DateStyle来控制PostgreSQL如何发布日期,但它是全局的并且有点受限.

相反,您应该to_char在查询日期时使用格式化日期,或者在客户端应用程序中对日期进行格式化.喜欢:

SELECT to_char("date", 'DD/MM/YYYY') FROM mytable;
Run Code Online (Sandbox Code Playgroud)

例如

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


Vao*_*sun 5

文件

日期/时间类型的输出格式可以设置为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)
Run Code Online (Sandbox Code Playgroud)

请记住,正如@Craig在其回答中提到的那样,更改datestyle也会(并且在第一轮中)更改postgres解析日期的方式。