SQL Server中的LPAD

时间:2016-12-12 17:02:44

标签: sql-server

我正在尝试在SQL Server中找出LPAD函数。我发现了一些语法,但结果并不是我所期待的。列ID定义为varchar。我想根据ID列的长度复制依赖字符串'04130'。任何提示都非常感谢。谢谢

SELECT 
    ID,
    RIGHT(REPLICATE('04130', 12)+LEFT(ID, 12), 12) --- (LPAD in sql server)
FROM 
    S_Information_Tab;

这是我得到的输出

ID     (No column name)
6452    130041306452
6495    130041306495

这是预期输出:

ID    (No column name)             
6452  041300416452
6495  041300416495

3 个答案:

答案 0 :(得分:2)

我想我理解你的问题。复制字符串的长度取决于ID的长度。我认为最好找到字符串的长度,从最终长度中减去,然后将你复制的字符串连接起来,如下所示:

select concat(substring(REPLICATE('04130', 12),1,12-len(id)),id)
  FROM S_Information_Tab;

答案 1 :(得分:1)

假设您的ID是nvarchar类型,这将为您提供预期的OUTPUT。

SELECT
    ID,
    CONCAT(LEFT(REPLICATE('04130', 12),8),LEFT(ID,4))
FROM
    S_information_tab;

另请查看以下链接:

https://msdn.microsoft.com/en-us/library/ms177601.aspx

https://msdn.microsoft.com/en-us/library/ms174383.aspx

用于测试目的

CREATE TABLE #TMP (
    ID NVARCHAR(10) 
);

INSERT INTO #TMP (ID)
VALUES
('6452')
,('6495');

SELECT
    ID
    ,CONCAT(LEFT(REPLICATE('04130', 12),8),LEFT(ID,4))
FROM
    #TMP;

DROP TABLE #TMP;

答案 2 :(得分:0)

达到预期结果的最简单方法是:

-- Prefixing a string field.
SELECT      
    '04130041' + ID
FROM 
    (
        -- Embedded sample rows.
        VALUES
            ('6452'),
            ('6495')
    ) AS S_Information_Tab(ID)
;

我已使用table value constructor从您的问题中生成示例值。

Left从字符串的开头返回 x 个字符。如果所需数量超过字符串的长度,则返回整个字符串。例子:

-- Left examples.
SELECT
    LEFT('123', 1) AS [R1], 
    LEFT('123', 2) AS [R2], 
    LEFT('123', 3) AS [R3],
    LEFT('123', 4) AS [R4]
;

返回

R1  R2  R3  R4
1   12  123 123