我有一个带时间戳的JSON对象:
{"Date/Time": "YYYY-MM-DD HH:MM:SS"}
我正在尝试直接查询该日期并将其转换为日期类型(使用YYYY-MM),如下所示:
SELECT
to_char(DATE (data->>'Date/Time'), 'YYYY-MM') as datetime
FROM
mytable;
假设列data
包含JSON对象,我得到以下错误:
invalid input syntax for type date: "time"
这是因为密钥带有正斜杠吗?如果是这样,我该如何逃脱呢? (用data->>'Date\/Time'
之类的反斜杠转义正斜杠不再搜索右键)
答案 0 :(得分:1)
我假设您问题中的"YYYY-MM-DD HH:MM:SS"
实际上是一个真实的时间戳记值,例如2018-07-13 18:55:42
,而不是您显示的字符。
to_char()
需要一个date
或timestamp
值,并将其转换为字符串。您想要另一种方式:将字符串转换为时间戳。为此,您需要使用to_timestamp()
to_timestamp('{"Date/Time": "2018-07-13 18:55:42"}'::json ->> 'Date/Time', 'YYYY-MM-DD HH24:MI:SS')
将值返回为实际的timestamp
值。如果您希望使用DATE
而不是timestamp
,则可以使用to_date()
代替to_timestamp()
如果要设置格式以便只显示年和月,则可以使用to_char()
to_char(to_timestamp('{"Date/Time": "2018-07-13 18:55:42"}'::json ->> 'Date/Time', 'YYYY-MM-DD HH24:MI:SS'),
'yyyy-mm') as datetime