我收到以下错误消息
错误:日期/时间字段值超出范围:“13/01/2010” 提示:也许你需要一个不同的“约会风格”设置。
我希望以DD / MM / YYYY
格式获取日期答案 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语句。