在字符串中插入特殊字符而不替换任何字符



假设我有一个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

演示

最新更新