sql - postgresql:从文本中自动提取字符串
问题描述
我在 postgresl 数据库中有下表
id | species
----+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 |[{"id":1,"animalName":"Lupo appennico","animalCode":"LUPO"},{"id":2,"animalName":"Orso bruno marsicano","animalCode":"ORSO"},{"id":3,"animalName":"Volpe","animalCode":"VOLPE"}]
----+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2 |[{"id":1,"animalName":"Cinghiale","animalCode":"CINGHIALE"},{"id":2,"animalName":"Orso bruno marsicano","animalCode":"ORSO"},{"id":3,"animalName":"Cervo","animalCode":"CERVO"}]|
我想只提取 ' "animalName":
' 之后的值并将它们放在一个新字段中。
id | new_field |
----+--------------------------------------------+
1 |Lupo appennico, Orso bruno marsicano,Volpe |
----+--------------------------------------------+
2 |Cinghiale, Orso bruno marsicano, Cervo |
不幸的是,该字段是文本类型(不是 json 或数组)。我试过使用正则表达式但没有成功。
解决方案
您的列不是 json 数据类型,但它似乎包含有效的 json。如果是这样,您可以对其进行强制转换并在其上使用 json 函数:
select id, string_agg(j ->> 'animalName', ', ') new_field
from mytable t
cross join lateral jsonb_array_elements(t.species::jsonb) j(obj)
group by id
order by id
编号 | 新字段 -: | :-------------------------------------------- 1 | 卢波·阿彭尼科、奥尔索·布鲁诺·马尔西卡诺、沃尔佩 2 | Cinghiale、Orso bruno marsicano、Cervo
推荐阅读
- java - 抽屉/侧边栏模板中无法识别 Android onclick 侦听器
- java - 在 Java 11 中映射泛型集合
- c# - 如何释放字典中对象使用的内存,还是不需要?
- javascript - 无法从允许未经身份验证的邮递员调用谷歌云功能
- python - 如何使用具有完整 I/O 的子进程从另一个脚本执行 Python 脚本?
- vba - MS Access VBA,试图更新一个表并从另一个表中删除
- debian - Debian 防火墙阻止 Minecraft 服务器端口
- python - Arthimatic 和 3D 数组中的组合 Numpy
- python - Python 2 与 Python 3 中的 sys.exc_info()
- javascript - 我的 REACT 应用程序出现路由问题