2015年6月25日 星期四

Oracle的RPAD/LPAD遇到中文的問題

R/L PAD
R就是right右邊,L就是left左邊,PAD就是墊板

SELECT RPAD('123', 5, 'x') TEST FROM DUAL;
如這行有5個位置的墊板,不夠的已x替代,並放在右邊,所以答案為
123xx

SELECT RPAD('1二3', 5, 'x') TEST  FROM DUAL;
但如果有中文答案卻是
1二3x


它把中文設為兩格(根據編碼會有所不同),但如果要讓它當成一格呢?

SELECT '1二3' || RPAD('x', 5, 'x')TEST FROM DUAL;
我的想法是把想顯示的字加上全部都是一樣的墊板,所以答案是
1二3xxxxx
字後面有5個x

SELECT SUBSTR('1二3' || RPAD('x', 5, 'x'), 1, 5) TEST FROM DUAL;
最後再用SUBSTR取出即可,所以答案為
1二3xx

寫個StoreProcedure
CREATE OR REPLACE FUNCTION CHI_SPACE(STR IN VARCHAR2, LEN IN PLS_INTEGER, PAD IN VARCHAR2)  RETURE VARCHAR2

AS BEGIN

RETURN SUBSTR(STR || RPAD(PAD, LEN, PAD), 1, LEN);--依照最後一個SQL的公式

END CHI_SPACE;

這樣以後就不管有沒有中文都可以統一用
SELECT CHI_SPACE('1二3', 5, 'x') FROM DUAL;

沒有留言:

張貼留言