Oracle SQL:如何为拼接后的数字与星号添加间隔空格?
解决Oracle SQL字符串字符间加空格的问题
嘿,这个需求用Oracle的REGEXP_REPLACE正则替换函数就能完美搞定!核心思路是把字符串里的每一个字符(不管是数字、小数点还是星号)都单独拆分出来,后面跟一个空格,再处理掉末尾多余的空格即可。
方法一:搭配TRIM去掉末尾空格
直接给你可运行的SQL语句:
SELECT TRIM(REGEXP_REPLACE('130.067'||'****', '(.)', '\1 ')) AS "WIN" FROM DUAL;
拆解一下各部分的作用:
'130.067'||'****':保留你原本的字符串拼接逻辑不变REGEXP_REPLACE(..., '(.)', '\1 '):正则里的(.)会匹配任意单个字符,\1引用刚才匹配到的字符,替换成\1就是给每个字符后面加一个空格TRIM():移除最后一个字符后面多余的空格,避免结果末尾多出来一个无效空格
方法二:用正则断言精准控制(无需额外TRIM)
如果你不想额外调用TRIM函数,可以用正则的负向先行断言来精准控制,只给非末尾的字符加空格:
SELECT REGEXP_REPLACE('130.067'||'****', '(.)(?!$)', '\1 ') AS "WIN" FROM DUAL;
这里的(?!$)是负向先行断言,意思是“匹配的字符后面不是字符串的结尾”,这样只有前面的字符会被加上空格,最后一个字符不会被处理,自然就不会产生末尾空格。
两种方法运行后都会得到你想要的结果:1 3 0 . 0 6 7 * * * *
内容的提问来源于stack exchange,提问作者Daniela Peñaloza
相关产品推荐
相关产品推荐

