Sql server SQL替换字符串值
我想知道如何在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' 任何想法或例子都很好。谢谢。我不知道为什
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' |