【发布时间】:2020-05-26 19:08:31
【问题描述】:
有个小问题……这是测试数据
CREATE TABLE #TestReplace (
Description NVARCHAR(500)
,ParamValue1 INT
,ParamValue2 INT
,ParamValue3 INT
);
INSERT INTO #TestReplace (Description)
VALUES ('This sentence has no parameteres, and it should be shown like this');
INSERT INTO #TestReplace (
Description
,ParamValue1
)
VALUES (
'This sentence has only one parametere, and it should be shown right here {param} with rest of text'
,100
);
INSERT INTO #TestReplace (
Description
,ParamValue1
,ParamValue2
)
VALUES (
'This sentence has two parameteres, one here {param} and one here {param}, show full sentence'
,100
,200
);
INSERT INTO #TestReplace (
Description
,ParamValue1
,ParamValue2
,ParamValue3
)
VALUES (
'This sentence has all parameteres, here {param} and here {param} and there {param}'
,100
,200
,300
);
在我的句子中,我有时会或从不出现单词{param} ...和列ParamValue1、ParamValue2、ParamValue3 ...我如何将第一次出现的单词{param}替换为列ParamValue1 的值,第二个字{param} 与列ParamValue2 的值和第三个与列ParamValue3 的值...我无法将字{param} 更改为{param1}、{param2} 和@ 987654335@ 并进行简单替换
到目前为止,我设法只替换了第一次出现...
SELECT CASE
WHEN CHARINDEX('{param}', DESCRIPTION) > 0
THEN STUFF(DESCRIPTION, CHARINDEX('{param}', DESCRIPTION), LEN('{param}'), ParamValue1)
ELSE DESCRIPTION
END
FROM #TestReplace
这在 Oracle 中很容易管理 (Oracle - replace string by appearance)
【问题讨论】:
-
SQL Server 本身不支持 REGEX,因此不支持 REGEX 替换。如果您确实想要这样的东西,您可能需要查看 CLR 函数。
-
您的 SQL Server 版本是多少?
-
目前在 Microsoft SQL Server 2012 上,但可以根据需要进行更新
标签: sql sql-server replace