我遇到了以下错误信息:
错误: 日期/时间字段值超出范围:"13/01/2010" 提示: 或许你需要设置不同的 "datestyle"。
我想以 DD/MM/YYYY 的格式获取日期。
错误: 日期/时间字段值超出范围:"13/01/2010" 提示: 或许你需要设置不同的 "datestyle"。
我想以 DD/MM/YYYY 的格式获取日期。
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),但根据需要进行调整也没有问题。
您可以将日期样式设置为欧洲风格dd/mm/yyyy
:
SET DateStyle TO European;
我建议不要这样做。通常我会尝试在各种格式之间进行转换,并将ISO格式的日期保留在数据源中。毕竟,这只是一种表示方式,而不是不同的数据。
编辑:
使用此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;
UPDATE some_table
SET date_column = to_date('13/01/2010', 'dd/mm/yyyy')
WHERE pk_column = 42;
如果您不是这样做的,您应该向我们展示生成错误的完整SQL语句。