Sql server SQL替换字符串值

Sql server SQL替换字符串值,sql-server,string,replace,Sql Server,String,Replace,我想知道如何在SQL中替换字符串中的多个文本值? 我有一个从表中得到的公式,但在该公式中有一些带撇号的文本值,我需要替换另一个表中的数值,例如: 表_值 ID| DESC |VALUE 01 | ABC | 5 02 | DEF | 10 03 | GHI | 15 表格_公式 ID | FORMULA 01 | X='ABC'+'DEF'+'GHI' 基本思想是得到相同的公式,结果如下: X='5'+'10'+'15' 任何想法或例子都很好。谢谢。我不知道为什

我想知道如何在SQL中替换字符串中的多个文本值? 我有一个从表中得到的公式,但在该公式中有一些带撇号的文本值,我需要替换另一个表中的数值,例如:

表_值

ID| DESC |VALUE

01 | ABC | 5

02 | DEF    | 10

03 | GHI    | 15
表格_公式

ID  | FORMULA

01  | X='ABC'+'DEF'+'GHI'   
基本思想是得到相同的公式,结果如下: X='5'+'10'+'15'


任何想法或例子都很好。谢谢。

我不知道为什么您的数据会这样存储,但我尝试解决您的问题

首先,您需要一个模式拆分器来解析
公式。这是一张从德文营地拍的

这是你的最后一个问题。这使用了字符串函数的组合,如
CHARINDEX
LEFT
RIGHT
,以及使用
对XML路径(“”)进行字符串连接:

结果

| ID |             FORMULA |                 |
|----|---------------------|-----------------|
|  1 | X='ABC'+'DEF'+'GHI' | X='5'+'10'+'15' |

我认为没有任何简单的解决办法。您可以创建一个函数,为每个公式值在表_值中查找匹配项,并使用“替换”更新公式,直到不再匹配为止,或者可以在表_值上运行游标循环,并使用正确的值替换表_公式中所有匹配的标记。
WITH Cte AS(
    SELECT 
        f.*,
        LHS     = LEFT(f.FORMULA, CHARINDEX('=', f.FORMULA) - 1),
        RHS     = RIGHT(f.FORMULA, LEN(f.FORMULA) - CHARINDEX('=', f.FORMULA)), 
        s.*,
        v.VALUE
    FROM Table_Formula f
    CROSS APPLY dbo.PatternSplitCM(RIGHT(f.FORMULA, LEN(f.FORMULA) - CHARINDEX('=', f.FORMULA)), '[+-/\*]') s
    LEFT JOIN Table_Values v
        ON v.[DESC] = REPLACE(s.Item, '''', '')
)
--SELECT * FROM Cte
SELECT 
    c.ID,
    c.FORMULA,
    LHS + '=' + STUFF((
        SELECT ISNULL('''' + CONVERT(VARCHAR(5), VALUE) + '''', ITEM)
        FROM Cte
        WHERE ID = c.ID
        ORDER BY ItemNumber
        FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')
    , 1, 0, '')
FROM Cte c
GROUP BY C.ID, c.FORMULA, c.LHS
| ID |             FORMULA |                 |
|----|---------------------|-----------------|
|  1 | X='ABC'+'DEF'+'GHI' | X='5'+'10'+'15' |