postgresql:从文本中自动提取字符串
Posted
技术标签:
【中文标题】postgresql:从文本中自动提取字符串【英文标题】:postgresql: automated extracting strings from text 【发布时间】:2020-07-23 06:25:22 【问题描述】:我在 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 或数组)。我试过使用正则表达式但没有成功。
【问题讨论】:
【参考方案1】:您的列不是 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
Demo on DB Fiddle:
编号 |新字段 -: | :-------------------------------------------- 1 |卢波·阿彭尼科、奥尔索·布鲁诺·马尔西卡诺、沃尔佩 2 | Cinghiale、Orso bruno marsicano、Cervo【讨论】:
以上是关于postgresql:从文本中自动提取字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PostgreSql 中的子字符串函数从字符串中提取单词