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

时间:2011-05-25 11:08:38

标签: postgresql

我收到以下错误消息

错误:日期/时间字段值超出范围:“13/01/2010” 提示:也许你需要一个不同的“约会风格”设置。

我希望以DD / MM / YYYY

格式获取日期

3 个答案:

答案 0 :(得分:48)

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),但根据需要调整它没有问题。

答案 1 :(得分:7)

您可以将日期样式设置为Europian(dd / mm / yyyy):

SET DateStyle TO European;

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

答案 2 :(得分:1)

修改

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

手册中的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语句。