Regex 带正则表达式(或其他)的PostgreSQL修剪文本字段

Regex 带正则表达式(或其他)的PostgreSQL修剪文本字段,regex,postgresql,Regex,Postgresql,我想对具有如下值的字段执行复杂的子字符串或修剪任务: "{"itemID":["15671\/3#1#4202","15686\/4#1#4203","15687\/1#1#4203"]}" "{"itemID":["15671\/3#1#4204","15687\/1#1#4204"]}" "{"itemID":["10966\/4#1#4201"]}" 大写:每个逗号前的最后四位数字(如果有)和最后四位数字 如果有办法区分单元格内的值,则效果更好: 4202, 4203 4204

我想对具有如下值的字段执行复杂的子字符串或修剪任务:

"{"itemID":["15671\/3#1#4202","15686\/4#1#4203","15687\/1#1#4203"]}" "{"itemID":["15671\/3#1#4204","15687\/1#1#4204"]}" "{"itemID":["10966\/4#1#4201"]}" 大写:每个逗号前的最后四位数字(如果有)和最后四位数字

如果有办法区分单元格内的值,则效果更好:

4202, 4203 4204 4201
我读了几个看似相关的问题,包括但没有找到足够的答案。

如果这些值始终是有效的JSON,那么假设该表中有一个主键列,您可以使用以下内容:

select t.id, string_agg(distinct right(item.id, 4), ',') as ids
from schema01.table01 t
   cross join jsonb_array_elements_text(t.the_column::jsonb -> 'itemID') as item(id)
group by t.id;   

联机示例:

使用正则表达式,假设值可能非json,可能不以4位数字结尾,并取消测试值数组以模拟表:

选择列,从REGEXP\u MATCHEScol、[\d]{4}[,\]]中选择字符串\u aggr[1],','和'g'r' 不安[ “{itemID:[15671\/31420215686\/41420315687\/114203]}”, “{itemID:[15671\/31420415687\/114204]}”, “{itemID:[10966\/414201]}” ]::文本[]作为列 按列分组 按列分组只是为了有一些行标识值作为分组依据,最好使用主键

结果:

| col                                                                | string_agg |
| ------------------------------------------------------------------ | ---------- |
| {"itemID":["15671\/3#1#4202","15686\/4#1#4203","15687\/1#1#4203"]} | 4202,4203  |
| {"itemID":["15671\/3#1#4204","15687\/1#1#4204"]}                   | 4204       |
| {"itemID":["10966\/4#1#4201"]}                                     | 4201       |

该列是什么数据类型?内容是否总是有效的JSON?1:类型为文本。2:不知道。谢谢,在雷克斯测试仪中工作得很好!我还不能测试它,因为我必须使用schema.table语法,它与这个t缩写不兼容。请使用表名schema01.table01编辑您的示例好吗?