【问题标题】:Datestyle issue in postgresqlpostgresql中的日期样式问题
【发布时间】:2014-05-14 12:32:58
【问题描述】:

使用:postgresql
表名:my_data

我的表中有timestamp 类型的以下列current_time。该字段的输入如下所示:

“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";

请帮助我了解如何以正确的timestamp 格式读取此文件。

【问题讨论】:

  • 好吧 "4/25/2014 5:29:37 PM 不是 ISO 时间戳格式。 ISO 格式为yyyy-mm-dd hh24:mi:ss
  • 有没有办法在 postgresql 中读取这种格式?或者至少阅读此内容并稍后转换为正确的格式?
  • 在我看来像可怕的 MDY (+time) 格式...

标签: sql postgresql datetime


【解决方案1】:

您的示例使用 MDYMDay 之前的第 1 天)样式的日期。所以你需要类似的东西

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,请您详细说明。
  • 这些数据从何而来?第一种方法应该为 postgres 提供首选格式 (ISO),如果不可能,请将该表达式(to_timestamp 调用)提供给您的插入/更新语句。
  • 正在将数据从CSV 文件读取到表中。那么,考虑到 postgres 无法检测到首选格式,有什么办法呢?
  • 如果您使用一些脚本(解析 csv),我会寻找一种方法将日期转换为该脚本语言中的首选格式,或者在从 csv 插入一行时使用 to_timestamp 函数.如果您在 postgres 中使用 COPY 命令,最好的方法可能是将 datestyle 配置临时设置为 MDY
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
  • 2012-11-28
  • 1970-01-01
  • 2011-02-03
  • 1970-01-01
  • 2016-06-15
相关资源
最近更新 更多