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

31
我遇到了以下错误信息:

错误: 日期/时间字段值超出范围:"13/01/2010" 提示: 或许你需要设置不同的 "datestyle"。

我想以 DD/MM/YYYY 的格式获取日期。


1
你是如何插入这些日期的?使用psql还是编程语言,还是其他方式? - Paul Tomblin
3个回答

54
SHOW datestyle;

 DateStyle 
-----------
 ISO, MDY
(1 row)

INSERT INTO container VALUES ('13/01/2010');
ERROR:  date/time field value out of range: "13/01/2010"
HINT:  Perhaps you need a different "datestyle" setting.

SET datestyle = "ISO, DMY";
SET

INSERT INTO container VALUES ('13/01/2010');
INSERT 0 1

SET datestyle = default;
SET

http://www.postgresql.org/docs/current/static/runtime-config-client.html#GUC-DATESTYLE

DateStyle - 用于设置日期和时间值的显示格式,以及解释模糊日期输入值的规则。由于历史原因,此变量包含两个独立组件:输出格式说明(ISO、Postgres、SQL或德语)和年/月/日排序的输入/输出说明(DMY、MDY或YMD)。

当然最好使用明确的输入格式(ISO 8601),但根据需要进行调整也没有问题。


9

您可以将日期样式设置为欧洲风格dd/mm/yyyy

SET DateStyle TO European;

我建议不要这样做。通常我会尝试在各种格式之间进行转换,并将ISO格式的日期保留在数据源中。毕竟,这只是一种表示方式,而不是不同的数据。


1
你应该始终将格式化日期存储在数据库中。将它们存储为日期字段,并在需要时解析成任何所需的格式。 - Paul Tomblin
我的具体情况是 - 欧洲数据源使用他们自己的日期格式,在生产中与 ISO 服务器默认设置发生冲突。将日期解析为对象是最好的方法。 - Patrick Mutuku

2

编辑:

使用此COPY命令时,有效的输入格式由服务器配置定义,可以通过在当前会话中使用Berry所描述的SET命令更改,或者通过调整服务器配置来更改。

手册中的DateStyle描述如下:
http://www.postgresql.org/docs/current/static/runtime-config-client.html#GUC-DATESTYLE

以下内容在实际情况下并不适用,但我仍然保留它作为参考

当使用日期(或时间戳)字面量时,总是要指定格式掩码进行转换。否则,您的语句将不可移植,并且可能无法在每个安装上运行。

ANSI SQL标准的日期字面量如下:

UPDATE some_table
   SET date_column = DATE '2011-05-25'
WHERE pk_column = 42;

如果您无法更改文字格式,您需要应用to_date()函数。
UPDATE some_table
   SET date_column = to_date('13/01/2010', 'dd/mm/yyyy')
WHERE pk_column = 42;

如果您不是这样做的,您应该向我们展示生成错误的完整SQL语句。


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