在orale中向左/向右填充字符
目前看到两种比较常用的填充的方法,这里总结记一下:
1、使用lpad函数或者rpad函数(这里先总结有这个可以用,至于细节上怎么用后面扩展)
--比如将港股股票代码转为内地股票代码的6位数 select lpad('9003', 6, '0') as stock_code from dual;
结果是:
row_num | stock_code |
1 | 009003 |
这里表示的是利用lpad函数,将字符串‘9003’自动在左边用‘0’单字符作为子串填充为6位数字符串。
如果SQL改为这样:
--将01作为子串,进行右边填充至字符串长度为10 select rpad('9003', 10, '01') as stock_code from dual;
结果是:
stock_code |
9003010101 |
注意:如果没有写填充子串的话,子串默认为空格,并且最后的字符串的长度还是参数里写的目标串要转化的字符串长度。比如:
select rpad('9003', 10) as stock_code from dual;
结果串的长度还是10.
2、第二种方法是:将填充字符串显式地现出来,与目标串拼接起来,最后用right或者left函数取。这个的好处是,填充的字符串可以是没有规则的字符串。比如:
select left('6007'||'ABCDEFGHIJKLMN', 11) as stock_code from dual;
结果是:
stock_code |
6007ABCDEFG |
这个用法的话注意两个问题:
》使用left函数的话,拼接子串在右边;right函数的话,拼接的子串在右边;
》假如目标串的长度与拼接子串之和小于参数规定的返回串的长度,那么返回结果仅仅是:目标串+拼接串(或者:拼接串+目标串)。这个是跟lpad或者rpad函数不同的地方。