在SQL Server 2008中,我看不到像LPAD
這樣的函數。例如,如何將以下查詢轉換爲T-SQL?謝謝你的回答SQL Server 2008中的LPAD
select LPAD(MY_VALUE,2,' ')) VALUE
FROM MY_TABLE
在SQL Server 2008中,我看不到像LPAD
這樣的函數。例如,如何將以下查詢轉換爲T-SQL?謝謝你的回答SQL Server 2008中的LPAD
select LPAD(MY_VALUE,2,' ')) VALUE
FROM MY_TABLE
基本上用你打算選擇的字符數填充它,然後右邊的字符串。
Select right(replicate(' ',2) + YourFieldValue,2) from YourTable
可以使用的空間函數,而不是複製,空間(number_of_spaces),複製只是讓你的替代字符墊。
我需要類似的東西,但我不能使用'+',因爲它被解釋爲數字'0000000000'和[seq_no]之間的加法。所以我用concat來代替,它工作正常。
select right (concat(replicate('0', 10), next value for seq_no), 10);
你也可以'CAST(your_number AS VARCHAR(10))'並且使用字符串 – 2015-06-24 12:19:43
手動計算可能會令人討厭應用於查詢內部。幸運的是,我們可以創建一個功能:(請替換VARCHAR
與NVARCHAR
根據自己的喜好,或使用其它的算法)
CREATE FUNCTION LPAD
(
@string VARCHAR(MAX), -- Initial string
@length INT, -- Size of final string
@pad CHAR -- Pad character
)
RETURNS VARCHAR(MAX)
AS
BEGIN
RETURN REPLICATE(@pad, @length - LEN(@string)) + @string;
END
GO
然後:
SELECT dbo.LPAD(MY_VALUE, 2, ' ') VALUE
FROM MY_TABLE
我想出了一個LPAD和RPAD函數,你可以使用字符串作爲pad部分。
它們應該像DB2版本一樣工作。
這裏的LPAD:
CREATE FUNCTION dbo.LPAD
(
@string NVARCHAR(MAX), -- Initial string
@length INT, -- Size of final string
@pad NVARCHAR(MAX) -- Pad string
)
RETURNS VARCHAR(MAX)
AS
BEGIN
RETURN SUBSTRING(REPLICATE(@pad, @length),1,@length - LEN(@string)) + @string;
END
GO
這裏是RPAD:
CREATE FUNCTION dbo.RPAD
(
@string NVARCHAR(MAX), -- Initial string
@length INT, -- Size of final string
@pad NVARCHAR(MAX) -- Pad string
)
RETURNS VARCHAR(MAX)
AS
BEGIN
RETURN @string + SUBSTRING(REPLICATE(@pad, @length),1,@length - LEN(@string));
END
GO
請注意,如果你正在嘗試複製從Oracle LPAD功能,沒有下面的答案是正確的輸出長度小於輸入長度的情況。 – Doug 2016-10-24 15:25:33