【问题标题】:postgresql: automated extracting strings from textpostgresql:从文本中自动提取字符串
【发布时间】: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 或数组)。我试过使用正则表达式但没有成功。

【问题讨论】:

    标签: sql json postgresql regexp-replace


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      相关资源
      最近更新 更多