如何在PostgreSQL中更改日期格式?

37
在Postgres中,我有一个带有日期列的表格。现在Postgres允许我使用Y-m-d格式编写日期。但我需要用d/m/Y格式的日期。如何更改?当我执行以下操作时:
   show datestyle;

我得到:

 "ISO, DMY"

在表格中以这种格式输入日期:13/02/2009

但是当我关闭并重新打开表格时,我看到的是:2009-02-13。JDBC也以这种格式给出日期。我做错了什么?


1
我建议您使用ISO 8601格式与数据库交互,将格式问题留给不同的层处理。 - mu is too short
@muistooshort 绝对没错。在编辑之前,这个问题似乎是一个混乱的版本,“如何使用to_char格式化日期”…但如果它谈论日期I/O的话,那绝对要坚持使用好的、理智的ISO日期,并在需要与客户端通信时使用to_charto_timestamp - Craig Ringer
6个回答

22

你也可以使用该命令

set datestyle to [your new datestyle];

在 postgreSQL 的控制台中。


12
然而,这只是在每个会话期间的变化。 - bp.

20

在日期字段中,yyyy-mm-dd是推荐的格式,这是ISO 8601的格式。

您可以在postgresql.conf文件中更改格式。

文档说明:

用户可以使用SET datestyle命令、postgresql.conf配置文件中的DateStyle参数或服务器或客户端上的PGDATESTYLE环境变量来选择日期/时间样式。格式化函数to_char也可用作更灵活的方式来格式化日期/时间输出。

希望对您有所帮助!


你尝试过修改环境变量 PGDATESTYLE 吗? - Ha Sh
postgresql.conf 文件中,我将样式更改为 datestyle = 'sql, dmy',但什么也没有发生。 - Kliver Max
1
我可以想到以下几种可能性。编辑postgresql.conf后,服务器没有重新启动。也许,如果可能的话,为正确的数据库(而不是集群)使用alter database语句设置日期样式。 最后一个小问题,如果您还没有这样做,请尝试使用“psql”执行查询。 - Ha Sh

9
使用 to_char 函数,按照以下方式处理你的日期:
select to_char(date_column1, 'Mon/DD/YYYY');

好的,它可以工作。但是我在我的选择中有大量的列,现在我不能使用*来选择所有列。在Postgres中更改日期样式而不是查询是否可能? - Kliver Max
@KliverMax 不,PostgreSQL 存储日期的方式并没有改变,只是在检索时进行了格式化。 - hd1

6

如果可能的话,请勿使用DATESTYLE。它会影响您会话中的所有代码,包括一些存储过程,这些存储过程可能没有设置明确的覆盖DATESTYLE

如果需要使用可能存在歧义的任何日期格式,例如D/M/Y,请使用to_char进行日期输出,使用to_timestamp进行日期输入。其余时间请使用ISO日期。


1

我在postgresql.conf中更改了这个变量,现在它可以工作了!

enter image description here


0
对于数据导入,您可以使用以下语句: SET datestyle = 'ISO, DMY';
然后执行您的复制表导入CSV语句。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接