如何在 SQL 服务器中多次替换字符串
How to multiple replace string in SQL Server
我有一个 table 喜欢 :
id name percent
-----------------------
1 John %01
2 Doe %02
3 2015-07-23 %03
4 testAdress %04
5 ...... ...
declare @tbl TABLE (id int, name varchar(500), [percent] char(3))
INSERT INTO @tbl (id, name, [percent])
SELECT 1, 'John', '%01'
UNION ALL
SELECT 2, 'Doe', '%02'
UNION ALL
SELECT 3, '2015-07-23', '%03'
UNION ALL
SELECT 4, 'testAdress', '%04'
并有类似
的文字
declare @text varchar(max) =
'<p align=\"left\"><font size=\"1\">My Header: </font>TEXT</p> <p align=\"left\"><font size=\"1\">FirstName: %01</font></p> <p align=\"left\"><font size=\"1\">LastName: %02</font></p> <p align=\"left\"><font size=\"1\">Datetime: %03</font></p> <p align=\"left\"><font size=\"1\">Address: %04</font></p></font></p>'`
现在我想将文本中的所有百分比替换为我 table 中的名称。
Table 可以有很多不同百分比的名称,文本也可以有很多百分比,例如我只取 4。响应必须像:
'<p align=\"left\"><font size=\"1\">My Header: </font>TEXT</p> <p align=\"left\"><font size=\"1\">FirstName: John</font></p> <p align=\"left\"><font size=\"1\">LastName: Doe</font></p> <p align=\"left\"><font size=\"1\">Datetime: 2015-07-23</font></p> <p align=\"left\"><font size=\"1\">Address: testAdress</font></p></font></p>'
怎么做?我尝试嵌套 REPLACE(REPLACE(REPLACE ....
但如果我必须替换 50 或 100% 这不是个好主意。
编辑:
我尝试这样的事情:
SELECT REPLACE(REPLACE(@text,'%01', (SELECT name FROM @tbl WHERE [percent] = '%01')),'%02',(SELECT name FROM @tbl WHERE [percent] = '%02'))
但是我有 %01 到 %99 的文本,不能为一个变量写 99 替换
DECLARE @txt VARCHAR(MAX) = '<p align=\"left\"><font size=\"1\">My Header: </font>TEXT</p> <p align=\"left\"><font size=\"1\">FirstName: %01</font></p> <p align=\"left\"><font size=\"1\">LastName: %02</font></p> <p align=\"left\"><font size=\"1\">Datetime: %03</font></p> <p align=\"left\"><font size=\"1\">Address: %04</font></p></font></p>'
试试这个:
SELECT @txt = REPLACE(@txt, [percent], ISNULL(name, ''))
FROM @tbl
WHERE CHARINDEX([percent], @txt) > 0
SELECT @txt
输出
<p align=\"left\"><font size=\"1\">My Header: </font>TEXT</p> <p align=\"left\"><font size=\"1\">FirstName: John</font></p> <p align=\"left\"><font size=\"1\">LastName: Doe</font></p> <p align=\"left\"><font size=\"1\">Datetime: 2015-07-23</font></p> <p align=\"left\"><font size=\"1\">Address: testAdress</font></p></font></p>
我有一个 table 喜欢 :
id name percent
-----------------------
1 John %01
2 Doe %02
3 2015-07-23 %03
4 testAdress %04
5 ...... ...
declare @tbl TABLE (id int, name varchar(500), [percent] char(3))
INSERT INTO @tbl (id, name, [percent])
SELECT 1, 'John', '%01'
UNION ALL
SELECT 2, 'Doe', '%02'
UNION ALL
SELECT 3, '2015-07-23', '%03'
UNION ALL
SELECT 4, 'testAdress', '%04'
并有类似
的文字declare @text varchar(max) =
'<p align=\"left\"><font size=\"1\">My Header: </font>TEXT</p> <p align=\"left\"><font size=\"1\">FirstName: %01</font></p> <p align=\"left\"><font size=\"1\">LastName: %02</font></p> <p align=\"left\"><font size=\"1\">Datetime: %03</font></p> <p align=\"left\"><font size=\"1\">Address: %04</font></p></font></p>'`
现在我想将文本中的所有百分比替换为我 table 中的名称。
Table 可以有很多不同百分比的名称,文本也可以有很多百分比,例如我只取 4。响应必须像:
'<p align=\"left\"><font size=\"1\">My Header: </font>TEXT</p> <p align=\"left\"><font size=\"1\">FirstName: John</font></p> <p align=\"left\"><font size=\"1\">LastName: Doe</font></p> <p align=\"left\"><font size=\"1\">Datetime: 2015-07-23</font></p> <p align=\"left\"><font size=\"1\">Address: testAdress</font></p></font></p>'
怎么做?我尝试嵌套 REPLACE(REPLACE(REPLACE ....
但如果我必须替换 50 或 100% 这不是个好主意。
编辑:
我尝试这样的事情:
SELECT REPLACE(REPLACE(@text,'%01', (SELECT name FROM @tbl WHERE [percent] = '%01')),'%02',(SELECT name FROM @tbl WHERE [percent] = '%02'))
但是我有 %01 到 %99 的文本,不能为一个变量写 99 替换
DECLARE @txt VARCHAR(MAX) = '<p align=\"left\"><font size=\"1\">My Header: </font>TEXT</p> <p align=\"left\"><font size=\"1\">FirstName: %01</font></p> <p align=\"left\"><font size=\"1\">LastName: %02</font></p> <p align=\"left\"><font size=\"1\">Datetime: %03</font></p> <p align=\"left\"><font size=\"1\">Address: %04</font></p></font></p>'
试试这个:
SELECT @txt = REPLACE(@txt, [percent], ISNULL(name, ''))
FROM @tbl
WHERE CHARINDEX([percent], @txt) > 0
SELECT @txt
输出
<p align=\"left\"><font size=\"1\">My Header: </font>TEXT</p> <p align=\"left\"><font size=\"1\">FirstName: John</font></p> <p align=\"left\"><font size=\"1\">LastName: Doe</font></p> <p align=\"left\"><font size=\"1\">Datetime: 2015-07-23</font></p> <p align=\"left\"><font size=\"1\">Address: testAdress</font></p></font></p>