Oracle SQL中如何仅将查询结果字符串的前导零替换为空格
你当前使用的正则(0)会匹配字符串中所有的0字符,所以字符串中间的0也会被替换为空格,不符合仅替换前导零的需求,可以使用以下两种方案调整:
方案1:正则匹配实现
用^锚定字符串开头,仅匹配开头连续的前导零进行替换:
SELECT REGEXP_REPLACE('00015201', '^0', ' ', 1, 0) FROM DUAL;
参数说明:
- 第4个参数
1:代表从字符串第1位开始匹配 - 第5个参数
0:代表替换所有符合规则的匹配项(因为锚定了开头,只会替换连续的前导零)
方案2:非正则实现(性能更优)
先移除所有前导零,再向左补空格到和原字符串长度一致即可,该方案不需要正则解析,处理大批量数据时效率更高:
SELECT LPAD(LTRIM('00015201', '0'), LENGTH('00015201'), ' ') FROM DUAL;
两种方案执行后都可以得到预期输出 15201。
内容的提问来源于stack exchange,提问作者VinuIsNotUnix
相关产品推荐
相关产品推荐

