無意中在網路上看到了這個 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')
將數字欄位值 轉換成 固定長度且前面補零的 字串
如:數字 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')
全站熱搜