PostgreSQL如何将JSON字段提取的文本值转换为DATE日期类型
PostgreSQL JSON字段提取值转DATE类型实现方案
错误原因分析
原有报错写法的问题出在运算符优先级:PostgreSQL中类型转换符::的优先级高于JSON文本取值运算符->>,语句t.config_exit::json ->> 'earliest_exit'::date实际执行时会先尝试将字符串常量'earliest_exit'转为DATE类型,逻辑完全错误,因此无法运行。
正确实现方式
基础写法(兼容所有支持JSON的PostgreSQL版本)
将->>的返回结果整体包裹后再做类型转换即可:
select (t.config_exit::json ->> 'earliest_exit')::date as Earliest_Exit from table t
兼容非法值/空值的容错写法
如果存在提取结果格式不合法、为空的场景,可使用以下写法避免查询中断:
- PostgreSQL 12及以上版本可用
try_cast做安全转换,转换失败自动返回NULL:
select try_cast(t.config_exit::json ->> 'earliest_exit' as date) as Earliest_Exit from table t
- 低版本可用
CASE判断+to_date显式指定日期格式实现容错:
select case when t.config_exit::json ->> 'earliest_exit' ~ '^\d{4}-\d{2}-\d{2}$' then to_date(t.config_exit::json ->> 'earliest_exit', 'YYYY-MM-DD') else null end as Earliest_Exit from table t
额外说明
如果config_exit字段本身就是jsonb类型,无需额外加::json做类型转换,直接取值即可。
内容的提问来源于stack exchange,提问作者user2210516
相关产品推荐
相关产品推荐

