在postgres数据库(9.4)中,我将数据保存为JSON对象。包括一些日期时间元素。为了在SQL查询中进行时间比较,我必须将此字符串转换为时间戳。我试过这个查询:
SELECT to_timestamp('2015-05-22T10:56:04.949Z','YYYY-MM-DD HH:MI:SS.MS');
-- dummy query just to test converting
OUTPUT: 2015-05-22 10:56:04.949+03
它基本上工作正常,除了,我不知道如何包括时区参数。这个字符串是UTC时间10:56 AM,如果我运行这个查询,我会得到+03时区的10:56(+03是我的本地时区)。根据Postgres文档,应该将TZ添加到格式字符串中以获取时区,但它不起作用。
如何格式化这个字符串,使它也包括时区从最初的日期-时间字符串?
2条答案
按热度按时间xriantvc1#
据我所知,不可能从字符串中解析时区。
但是,如果你知道你的时间戳总是在UTC时区,你可以用途:
1mrurvl12#
只是需要注意的是,从PostgreSQL开始,没有特定含义的12个字符不再被忽略,所以时间前面的“T”导致之前的答案错误。模式需要跳过T,将其括在双引号中
从文档:
在PostgreSQL 12之前,可以使用非字母或非数字字符跳过输入字符串中的任意文本。例如,to_timestamp('2000 y 6 m1 d','yyyy-MM-DD')用于工作。现在,您只能使用字母字符用于此目的。例如,to_timestamp('2000 y 6 m1 d','yyyyytMMtDDt')和to_timestamp('2000 y 6 m1 d','yyyy“y“MM“m“DD“d”')跳过y、m和d。