首页 > 解决方案 > 如何以以下格式从 postgres 中提取字符串 {'x: 'data', 'old_x': 'Datax'}

问题描述

我的行中有以下类型的数据

{'new_value_formatted': 'Committed/Test Transaction', 'old_value_formatted': 'Completed'}

我希望将 new_value_formatted 和 old_value_formatted 作为单独的列和以列方式存储的数据

尝试了正则表达式 '(([AZ/ ])\w+)'。还是不能隔离。

select a.id,a.title,additional_data,
substring(b.additional_data ->> "old_value_formatted" FROM '[0-9a-zA-Z]+')  as "Old Value", 
substring(b.additional_data ->> "new_value_formatted" FROM '[0-9a-zA-Z]+')  as "New from table a,b....
Old Value | New_Value    
__________|____________
xxxxx .   | xxxxx

标签: sqljsonpostgresql

解决方案


此处显示的格式不是有效的 json。Json 使用双引号。如果在 postgresql 9.2+ 上,我会replace(data,'\'','"')::json得到有效的 json,处理引用问题。然后你可以做选择new_data ->> 'new_value_formatted'

我使用 new_data 作为有效 json 版本的占位符。

如果您需要此旧版本,请返回给我。

Ps:这个没有测试,因为我目前手头没有机器。


推荐阅读