正则表达式替换SQL

问题描述 投票:0回答:2

我必须用空字符串替换SQL中的字符串模式,有人可以建议我吗?

输入字符串'AC001,AD001,AE001,SA001,AE002,SD001' 输出字符串'AE001,AE002

有4位数代码,前2个字符为“字母”,后两位是数字。这始终是一个4位数的代码。除了以“AE”开头的代码之外,我必须更换所有代码。

我可以在字符串中有0个或更多个“AE”代码实例。对于多个“AE”代码,最终输出应该是格式化的字符串“用逗号分隔”,如上所述。

regex postgresql
2个回答
0
投票

这是一个多次调用regex_replace的选项,在每次迭代中逐渐消除“不需要”字符串以获得所需的输出。

SELECT regexp_replace(
            regexp_replace(
                regexp_replace(
                    'AC001,AD001,AE001,SA001,AE002,SD001', '(?<!AE)\d{3},{0,1}', 'X','g'
                ),'..X','','g'
            ),',$','','g'
        )

见演示here


0
投票

我会将列表转换为数组,不要将其转换为行,然后过滤掉应该保留的数据并将其聚合回字符串:

select string_agg(t, ',')
from unnest(string_to_array('AC001,AD001,AE001,SA001,AE002,SD001',',') as x(t)
where x.t like 'AE%'; --<< only keep those

这与字符串中的元素数量无关,可以轻松扩展以支持更复杂的条件。


这是一个很好的例子,为什么在单个列中存储逗号分隔值并不是一个好主意。

© www.soinside.com 2019 - 2024. All rights reserved.