将文本从 json 投射到 Date

Cast text from json to Date

我有这个 json 字段,我想要结果作为日期。

select t.config_exit::json ->> 'earliest_exit' as Earliest_Exit
from table t

这给我 null 或例如 2021-11-03 作为结果,但作为文本字段。

select t.config_exit::json ->> 'earliest_exit'::date as Earliest_Exit
    from table t

我已经试过了,但没用。

将json表达式放在括号之间,例如

SELECT (t.config_exit ->> 'earliest_exit')::date
FROM t;

演示:db<>fiddle

WITH t (config_exit) AS (
  VALUES ('{"earliest_exit":"2021-11-03"}'::jsonb)
)
SELECT (t.config_exit ->> 'earliest_exit')::date
FROM t;

    date    
------------
 2021-11-03

如果 earliest_exit 为空,它将失败,因此您可能希望在投射之前将其过滤掉。或者,您可以使用 to_date,但它可能会给您不想要的日期:

WITH t (config_exit) AS (
  VALUES ('{"earliest_exit":"2021-11-03"}'::jsonb),
         ('{"earliest_exit":""}'::jsonb),
         ('{"earliest_exit":null}'::jsonb)
)

SELECT to_date(t.config_exit ->> 'earliest_exit','YYYY-MM-DD')
FROM t;

    to_date    
---------------
 2021-11-03
 0001-01-01 BC
 
(3 Zeilen)