我想在
'_'
上拆分字符串,并将第三组替换为 'oooo'
。
有没有什么方法可以简单地做到这一点并且不假设正好有 5 个组?
CONCAT( SPLIT_PART(test, '_', 1)
,SPLIT_PART(test, '_', 2)
,'OOOO'
,SPLIT_PART(test, '_', 4)
,SPLIT_PART(test, '_', 5)
)
示例:
'GjHf00_i8S7b_tst00_UL000_perce'
'GjHf00_i8S7b_oooo_UL000_perce'
您可以使用
regexp_replace()
:
演示regexp_replace ( string text, pattern text, replacement text, start integer, N integer [, flags text ] ) → text
替换 POSIX 正则表达式模式第 N 个匹配的子字符串,或者如果 N 为零则替换所有此类匹配;请参阅第 9.7.3 节。
select regexp_replace(test,'[^_]+','oooo',1,3)
from examples;
它正在寻找 1 个或多个非下划线的子字符串,从位置 1 开始并尝试替换第三个匹配项:
[]
是一组允许的字符^
表示您希望排除该组_
只是下划线+
表示您正在寻找其中的 1 个或多个如果您同意总是有 5 个小组的假设,那么只要您将
concat()
替换为 concat_ws()
,您的想法就会有效。否则你会丢失你要分割的下划线:
select concat_ws('_',split_part(test, '_', 1)
,split_part(test, '_', 2)
,'oooo'
,split_part(test, '_', 4)
,split_part(test, '_', 5) )
from examples;