假设我有一个varchar变量。我可以在字符串的每2个字符后插入不同的符号,直到字符串结束。即直到长度(字符串(。
例如:输入:'12345678'我们不知道什么是输入和输入的长度,我们想要的输出是:输出:'12_34&56#78'(特殊字符可以是任何字符(请让我知道是否可以动态使用循环或其他什么。
这可以使用一个简单的REGEXP_REPLACE
来完成。
第一个参数将是您的原始字符串。
第二个参数将是您想要在其后放置字符的regex模式。在这种情况下,它是.
(任何字符(出现2次。它被圆括号包围,下一个参数需要圆括号来指定捕获组。
第三个参数是使用1
指定第一个捕获组,然后您可以将任何想要显示的内容放在捕获组之后。在下面的例子中,我使用了一个!
。
SELECT REGEXP_REPLACE ('12345678', '(.{2})', '1!') as str FROM DUAL;
STR
_______________
12!34!56!78!
如果不希望该字符位于字符串末尾,可以从右侧TRIM
,如果特殊字符可能出现在原始字符串末尾,则可以SUBSTR
。
您可以在分割和填充特殊字符时使用分层查询,通过使用DBMS_RANDOM.VALUE
来生成除最后一个片段之外的一些特殊字符,然后使用LISTAGG()
功能来再次组合片段,如
SELECT id,LISTAGG( SUBSTR(col,1+(level-1)*2,2)||
CASE WHEN level < CEIL(LENGTH(col)/2)
THEN
CHR(TRUNC(DBMS_RANDOM.VALUE(33,48)))
END)
WITHIN GROUP (ORDER BY level)
AS result
FROM t
GROUP BY id
CONNECT BY level <= CEIL(LENGTH(col)/2)
AND PRIOR SYS_GUID() IS NOT NULL
AND PRIOR ID = ID
演示