PostgreSQL中的日期格式问题

3

使用:postgresql
表名:my_data

我在我的表中有一个current_time列,类型为timestamp。这个字段的输入看起来像这样:

"2014年4月26日下午5:27:48"

我从一个csv文件中读取这个表格,但是我遇到了以下错误:

ERROR:  date/time field value out of range: "4/25/2014 5:29:37 PM"
HINT:  Perhaps you need a different "datestyle" setting.
CONTEXT:  COPY my_data, line 2, column current_time: "4/25/2014 5:29:37 PM"

我寻求了解决方案并尝试了这个方法,但它没有帮助到我:

set datestyle = "ISO, DMY";

请帮我以正确的时间戳格式读取这个文件。


好的,“4/25/2014 5:29:37 PM”不是ISO时间戳格式。ISO格式是“yyyy-mm-dd hh24:mi:ss”。 - user330315
有没有办法在PostgreSQL中读取这种格式?或者至少先读取并稍后转换为正确的格式? - StrikeR
对我来说,这看起来像可怕的MDY(+时间)格式... - wildplasser
1个回答

4

你的示例使用了MDY(月份在日期前面)格式的日期。因此,你需要像这样的东西:

SET DateStyle TO MDY;

一般而言,使用ISO格式更为安全。首先尝试使用该格式进行传递,如果不行可以使用to_timestamp()函数在格式之间进行转换。

SELECT to_timestamp('4/25/2014 5:29:37 PM', 'MM/DD/YYYY HH:MI:SS AM');

我对 SQL 不太熟悉,所以请问我是应该首先将这一列读取为 varchar,然后再使用 to_timestamp() 进行转换,还是直接将其读取为 timestamp - StrikeR
这些数据来自哪里?第一种方法应该是将首选格式(ISO)提供给Postgres,如果不可能,则将该表达式(to_timestamp调用)提供给您的插入/更新语句。 - pozs
数据正在从 CSV 文件中读取到表中。那么,考虑到Postgres无法检测到首选格式,可能的方法是什么? - StrikeR
如果您正在使用某些脚本(解析csv文件),我建议您在该脚本语言中寻找一种将日期转换为首选格式的方法,或者在从csv插入行时使用to_timestamp函数。如果您正在使用Postgres中的COPY命令,则最好的方法可能是将datestyle配置临时设置为MDY - pozs

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