Lpad與Rpad的用法
筆者,在前段時間,在思考的時候,發現了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 KING 3 7839 7839
執行結果顯示,兩者的效果一樣,倘若字串不知道長度的情況下,我們就可以用這種方法替代正常用法了;
通常情況下,我們用的都是Lpad;Rpad的用法很少用。
最後,
分享以下,若是長度不知道的情況,該如何用lpad來填充:
lpad(b.empno, length(b.empno)level*4, ' ')--通常用的都是英文字母,所以就用length()來求取字元長度;