笔者,在前段时间,在思考的时候,发现了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()来求取字符长度;