2011-05-06 54 views
21

在SQL Server 2008中,我看不到像LPAD這樣的函數。例如,如何將以下查詢轉換爲T-SQL?謝謝你的回答SQL Server 2008中的LPAD

select LPAD(MY_VALUE,2,' ')) VALUE 
FROM MY_TABLE 
+0

請注意,如果你正在嘗試複製從Oracle LPAD功能,沒有下面的答案是正確的輸出長度小於輸入長度的情況。 – Doug 2016-10-24 15:25:33

回答

26

基本上用你打算選擇的字符數填充它,然後右邊的字符串。

Select right(replicate(' ',2) + YourFieldValue,2) from YourTable 

可以使用的空間函數,而不是複製,空間(number_of_spaces),複製只是讓你的替代字符墊。

+0

這會從右邊獲得字符。例如,我想從18.00得到18.This返回00 – jhash 2011-05-06 14:07:39

+1

您提出的關於LPAD的問題,請從dual給出xxxab選擇LPAD('ab',5,'x')。它將左側填充到所需的數量 - 模仿SQL Server中的數據。從技術上講,你的PLSQL也是無效的,因爲你也可能錯過了一些東西。 – Andrew 2011-05-06 14:30:17

+0

你是對的。謝謝 – jhash 2011-05-06 14:47:24

2

我需要類似的東西,但我不能使用'+',因爲它被解釋爲數字'0000000000'和[seq_no]之間的加法。所以我用concat來代替,它工作正常。

select right (concat(replicate('0', 10), next value for seq_no), 10); 
+0

你也可以'CAST(your_number AS VARCHAR(10))'並且使用字符串 – 2015-06-24 12:19:43

3

手動計算可能會令人討厭應用於查詢內部。幸運的是,我們可以創建一個功能:(請替換VARCHARNVARCHAR根據自己的喜好,或使用其它的算法)

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 

應工作since SQL Server 2005

0

我想出了一個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