笔者,在前段时间,在思考的时候,发现了Lpad的另外一种语法;
首先:在这之前,先看看我们通常的用法:
Lpad(string,n,[pad_string])–通常第三个参数可以默认为‘ ’一个空格
Rpad(string,n,[pad_string])
select lpad(ename, 10) string _1,
lpad(ename, 10 , ‘*’) string _2
from emp
lpad(ename, 10)的执行结果,是默认用了‘ ’一个空格;
接着,我们就来看看我最近遇到的另外一种用法:
通常情况下,Lpad(string,n,[pad_string])中的string ,我们都会当成字符串来看待,若是是一个空格呢?
有时候,我们会遇到这样的情况,就是要将一个字符串左边添加‘ ’空格,来进行错位,而字符串的长度值又是不确定的,怎么办呢?
那么,我们就来向下看:
Lpad(string,n,[pad_string])–第三个参数可以默认,其实lpad可以只要两个参数;
将string 替代成‘ ’空格,我们来看看效果 :Lpad(‘ ‘,level)–level 就是层次查询得到的level值;
我们以EMP中的SCOTT用户为例,看看下面的 SQL:
select b.empno,
b.ename,
level,
lpad(b.empno, level*4, ‘ ‘) string_1,
lpad(‘ ‘, level*4-4)||b.empno string_2
from emp b
start with b.ename = ‘SCOTT’
connect by prior b.mgr = b.empno;
EMPNO ENAME LEVEL STRING_1 STRING_2
—– ———- ———- ——————————————————————————-
7788 SCOTT 1 7788 7788
7566 JONES 2 7566 7566
7839 勤劳的香氛 3 7839 7839
执行结果显示,两者的效果一样,倘若字符串不知道长度的情况下,我们就可以用这种方法替代正常用法了;
通常情况下,我们用的都是Lpad;Rpad的用法很少用。
最后,
分享以下,若是长度不知道的情况,该如何用lpad来填充:
lpad(b.empno, length(b.empno)level*4, ‘ ‘)–通常用的都是英文字母,所以就用length()来求取字符长度;