PostgreSQL无法使用to_date()解析字符串到目前为止

时间:2016-06-02 01:22:34

标签: sql postgresql

我有一个非常标准的日期作为字符串,我需要解析为日期类型:

"2016-06-01T23:34:25+00:00"

我使用'YYYY-MM-DDTHH24:MI:SS'作为格式掩码,此查询尝试获取并解析日期:

SELECT to_date('last_updated_on', 'YYYY-MM-DDTHH24:MI:SS') 
AS last_updated_on FROM locations 
limit 1

我发生了这样的错误:

ERROR: invalid value ":2" for "MI"
SQL state: 22007
Detail: Value must be an integer.

我已经查看了文档中的所有内容,并试图找出发生这种情况的原因,我完全感到困惑。

我正在使用PostgreSQL 9.4

2 个答案:

答案 0 :(得分:4)

使用T""格式字符串包围。如果需要保留日期的时间部分,请使用to_timestamp()

SELECT to_date('last_updated_on', 'YYYY-MM-DD"T"HH24:MI:SS') 
AS last_updated_on FROM locations 
limit 1

转换为带时间戳的日期

SELECT to_timestamp('last_updated_on', 'YYYY-MM-DD"T"HH24:MI:SS') 
AS last_updated_on FROM locations 
limit 1

答案 1 :(得分:4)

问题似乎是字符串中间的T n。这看起来很简单:

SELECT to_date(replace('2016-06-01T23:34:25+00:00', 'T', ''),  'YYYY-MM-DD HH24:MI:SS')

但是,您可能需要to_timestamp()

SELECT to_timestamp('2016-06-01T23:34:25+00:00', 'YYYY-MM-DD HH24:MI:SS')

另请注意,last_updated_on周围有单引号。这意味着它被解释为字符串,而不是列名。