Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQLServer2008中的LPAD_Sql Server_Tsql - Fatal编程技术网

Sql server SQLServer2008中的LPAD

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 您可以使用空格函数而不是复制,空格(空格数),复制只允许您填充可选字符。我需要类似的字符,但我不能使用“+”,因为

我在SQLServer2008中看不到类似于
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