【问题标题】:How to multiple replace string in SQL Server如何在 SQL Server 中多次替换字符串
【发布时间】:2015-10-13 08:35:10
【问题描述】:

我有一张这样的桌子:

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>'`

现在我想将文本中的所有百分比替换为表格中的名称。

表格可以有很多不同百分比的名称,文本也可以有很多百分比,例如我只取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 替换

【问题讨论】:

    标签: sql sql-server tsql replace sql-server-2008-r2


    【解决方案1】:
    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>
    

    【讨论】:

    • 谢谢它对我有用,你能解释一下这部分吗:WHERE CHARINDEX([percent], @txt) &gt; 0 它在 txt 中找到所有百分比?
    • 只是检查被替换的文本是否在原始文本中。
    猜你喜欢
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 2020-01-16
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 2016-12-03
    相关资源
    最近更新 更多