2010年8月16日 星期一

SQL 字串補0

常常碰到字串長度若不足的情況下,要將字串不足的位數補0(或是其他符號)
例如:若要固定字串長度為四位 ,則 2 --> 0002
SQL SERVER沒有直接可用的函數,只好自己組囉......





我們可以利用兩個SQL函數來實現:

1.REPLICATE ( character_expression ,integer_expression ) :重複填
入指定值
character_expression:欲重複(填補)的字串值(例:0或其他符號)
integer_expression:欲重複的次數
2.LEN(string_expression ):傳回指定字串運算式的字元數(字串長度),但尾端空白不算

實做步驟(以填補「0」為例):

1.用指定的字串長度減掉現有字串長度,就可以得出「0」應該重複(填補)幾次:
假設若要固定長度為4位,不足4位數則會在前端補「0」--->0002
則「0」應該重複幾次=4-LEN(string_expression )

2.指定重複次數:
將步驟1所求出重複次數:4-LEN(string_expression )代入REPLICATE函數中
將「0」代入REPLICATE函數中
    則: REPLICATE ( character_expression ,integer_expression)
      --->REPLICATE ( '0' ,4-LEN(string_expression ))

如果、我們的原始字串長度 LEN(string_expression )=1 的話 ,
REPLICATE 會成 --->REPLICATE ( '0' ,3 )
--->得出結果為 '000'

3.將結果加上原始字串就是填補後的結果了:
REPLICATE ( '0' ,3 ) +string_expression



範例1:
假設我現有一筆資料,該筆資料工令欄位的值為 9703-1234-000-xxxx,第三個「-」
(第15個字元以後)後面的字元 (xxxx)長度是變動的,最多為四位數,若我要取出第
15個字元以後的四位數,不足四位填補「0」的話,如以下兩例我會取出「52」與
「102」變成「0052」與「0102」:
「9703-AAAA-000-52 」 --->「52」 --->「0052 」
「9703-AAAA-000-102 」--->「102 」--->「0102 」

語法如下:
REPLICATE('0',4-LEN(substring(工令,15,4)))+substring(工令,15,4)
範例2:

沒有留言:

張貼留言