postgresql:自动从文本中提取字符串

postgresql: automated extracting strings from text

我在 postgresl 数据库中有以下 table

        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

Demo on DB Fiddle:

id | new_field                                  
-: | :------------------------------------------
 1 | Lupo appennico, Orso bruno marsicano, Volpe
 2 | Cinghiale, Orso bruno marsicano, Cervo