我在SQL Server 2008中看不到像LPAD
这样的函数。例如,如何将以下查询转换为T-SQL?谢谢你的回答
select LPAD(MY_VALUE,2,' ')) VALUE
FROM MY_TABLE
答案 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
答案 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