我正在尝试在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
答案 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