我必须用空字符串替换SQL中的字符串模式,有人可以建议我吗?
输入字符串'AC001,AD001,AE001,SA001,AE002,SD001'
输出字符串'AE001,AE002
有4位数代码,前2个字符为“字母”,后两位是数字。这始终是一个4位数的代码。除了以“AE”开头的代码之外,我必须更换所有代码。
我可以在字符串中有0个或更多个“AE”代码实例。对于多个“AE”代码,最终输出应该是格式化的字符串“用逗号分隔”,如上所述。
这是一个多次调用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
我会将列表转换为数组,不要将其转换为行,然后过滤掉应该保留的数据并将其聚合回字符串:
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
这与字符串中的元素数量无关,可以轻松扩展以支持更复杂的条件。
这是一个很好的例子,为什么在单个列中存储逗号分隔值并不是一个好主意。