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 中的子字符串函数从字符串中提取单词

在pyspark中编写自定义NER和POS标记器,以在管道方法中用于文本输入的特征提取

7 从文本提取信息

从 PostgreSQL 中的字段中提取数字

如何在 POSTGRESQL 中从 DATE 中提取年份

仅从文本中提取数字