無意中在網路上看到了這個 Issue:
將數字欄位值 轉換成 固定長度且前面補零的 字串
如:數字 123 ,轉換成 0000123 ...

若想單純透過 T-SQL 解決的話,可透過 REPLICATE 這個函數
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHT/tsqlref9/html/0cd467fb-3f22-471a-892c-0039d9f7fa1a.htm


Ex:REPLICATE('0',(10 - LEN(CAST( 欄位一 AS VARCHAR))))
透過這樣的方式便可以產生 前面補零的 字串

然後再透過 T-SQL 的運算子:+,便可達到目標:
REPLICATE('0',(10 - LEN(CAST( 欄位名稱 AS VARCHAR)))) + CAST( 欄位名稱 AS VARCHAR)

倘若欄位本身為文字欄位,則可更容易達到目標:
REPLICATE('0',(10 - LEN(欄位名稱))) + 欄位名稱


除此之外,更可透過建立 Function 的方式來共用函式
更輕鬆的達到 前面 或 後面 補零的需求

1. 前面補零的函式:
CREATE FUNCTION fnPadLeft

  @PadChar char(1), 
  @PadLength int, 
  @InputString varchar(100)
)
RETURNS varchar(1000)
AS
BEGIN 
  DECLARE @PaddedString varchar(1000) 
  DECLARE @InputLength int   
 
  SET @InputLength = LEN(@InputString)   
  IF @InputLength >= @PadLength   
    BEGIN   
          SET 
            @PaddedString = @InputString    
    END 
  ELSE    
    BEGIN
          SET @PaddedString = REPLICATE(@PadChar, @PadLength - @InputLength) + @InputString    
    END   
 
  RETURN @PaddedString
END



2. 稍微修改一下,便是後面補零的函式:
CREATE FUNCTION fnPadRight

  @PadChar char(1), 
  @PadLength int, 
  @InputString varchar(100)
)
RETURNS varchar(1000)
AS
BEGIN 
  DECLARE @PaddedString varchar(1000) 
  DECLARE @InputLength int   
 
  SET @InputLength = LEN(@InputString)   
  IF @InputLength >= @PadLength   
    BEGIN   
          SET 
            @PaddedString = @InputString    
    END 
  ELSE   
    BEGIN
          SET @PaddedString = @InputString + REPLICATE(@PadChar, @PadLength - @InputLength) 
    END   
 
  RETURN @PaddedString
END


這樣一來,便可以直接下 T - SQL 囉 ...

SELECT dbo.fnPadLeft('X', 10, 123)
SELECT dbo.fnPadRight('X', 10, 'ABC')
arrow
arrow
    全站熱搜

    瘋狂螞蟻 發表在 痞客邦 留言(0) 人氣()