SQL Server 2008中的LPAD

时间:2011-05-06 13:52:25

标签: sql-server tsql

我在SQL Server 2008中看不到像LPAD这样的函数。例如,如何将以下查询转换为T-SQL?谢谢你的回答

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

4 个答案:

答案 0 :(得分:32)

基本上用你想要选择的字符数填充它,然后右键字符串。

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

您可以使用空格函数而不是复制空格(number_of_spaces),复制只允许您使用其他字符填充。

答案 1 :(得分:4)

手动计算可能很烦人,无法应用于内部查询。幸运的是,我们可以创建一个函数:

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

(请根据自己的喜好将VARCHAR替换为NVARCHAR,或使用替代算法。)

然后:

SELECT dbo.LPAD(MY_VALUE, 2, ' ') VALUE
FROM MY_TABLE

应该有效since SQL Server 2005

答案 2 :(得分:2)

我需要类似的东西,但我无法使用' +'因为那时它被解释为数字之间的加法&0000000000'和[seq_no]。所以我使用了concat而且效果很好。

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

答案 3 :(得分:1)

我已经提出了一个LPAD和RPAD函数,你可以在其中使用字符串作为pad-part。

它们应该与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