Sql server SQLServer2008中的LPAD
我在SQLServer2008中看不到类似于Sql server SQLServer2008中的LPAD,sql-server,tsql,Sql Server,Tsql,我在SQLServer2008中看不到类似于LPAD的函数。例如,如何将以下查询转换为T-SQL select LPAD(MY_VALUE,2,' ')) VALUE FROM MY_TABLE 基本上,用您要选择的字符数填充它,然后右键单击字符串 Select right(replicate(' ',2) + YourFieldValue,2) from YourTable 您可以使用空格函数而不是复制,空格(空格数),复制只允许您填充可选字符。我需要类似的字符,但我不能使用“+”,因为
LPAD
的函数。例如,如何将以下查询转换为T-SQL
select LPAD(MY_VALUE,2,' ')) VALUE
FROM MY_TABLE
基本上,用您要选择的字符数填充它,然后右键单击字符串
Select right(replicate(' ',2) + YourFieldValue,2) from YourTable
您可以使用空格函数而不是复制,空格(空格数),复制只允许您填充可选字符。我需要类似的字符,但我不能使用“+”,因为它被解释为数字“0000000000”和[序号]之间的加法。所以我改用了concat,效果很好
select right (concat(replicate('0', 10), next value for seq_no), 10);
手动计算应用于内部查询可能会很烦人。幸运的是,我们可以创建一个函数:
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
,或使用其他算法。)
然后:
应该可以工作。我已经提出了一个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
这将从右边获取字符。例如,我想从18.00中获取18个字符。这将返回00如果您对LPAD有任何疑问,请从dual-gives-xxxab中选择LPAD('ab',5,'x'),例如,它将左侧填充到所需的数量-在SQL Server中模拟。从技术上讲,您的PLSQL也是无效的,因为它也包含括号,所以您可能遗漏了一些内容。您还可以
强制转换(您的\u编号为VARCHAR(10))
并使用stringsBe,请注意,如果您试图从Oracle复制LPAD函数,对于输出长度小于输入长度的情况,以下答案均不正确。
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