在PostgreSQL JSON中转义正斜杠

时间:2018-07-13 16:48:15

标签: sql json postgresql

我有一个带时间戳的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'之类的反斜杠转义正斜杠不再搜索右键)

1 个答案:

答案 0 :(得分:1)

我假设您问题中的"YYYY-MM-DD HH:MM:SS"实际上是一个真实的时间戳记值,例如2018-07-13 18:55:42,而不是您显示的字符。


to_char()需要一个datetimestamp值,并将其转换为字符串。您想要另一种方式:将字符串转换为时间戳。为此,您需要使用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