如何使用SQL Server删除字符串中第二个符号



输入:

ROUND((#X# + #Y#) / #Z#,2 )

我正在寻找的输出:

ROUND((@X + @Y) / @Z,2 )
;WITH sampleData AS
(
SELECT myArray = 'round(#A1# + #A2#,0)+123451'
)
,cte2 as
(
SELECT
[myArray] 
,value as val
FROM [sampleData]
CROSS APPLY STRING_SPLIT([myArray],'#'))
,cet3 as(
select case when val like '%A%' or val like '%B%' then '@'+val 
else val end as finalformula from cte2 as A),
cet4 as(select cet3.finalformula as formula from cet3)
SELECT STRING_AGG(cet4.formula,'') AS Result FROM cet4

请尝试以下解决方案。

它使用XML和XQuery。

我们正在标记输入字符串,并为预定义的字符序列添加at符号(@):X、Y和Z。

SQL

DECLARE @round VARCHAR(MAX) = 'ROUND((#X# + #Y#) / #Z#,2 )'
, @separator CHAR(1) = '#'
, @atsign CHAR(1) = '@';
SELECT TRY_CAST('<root><r><![CDATA[' + 
REPLACE(@round, @separator, ']]></r><r><![CDATA[') + 
']]></r></root>' AS XML).query('
for $x in /root/r/text()
return if($x=("X","Y","Z")) then concat(sql:variable("@atsign"), $x)
else string($x)
').value('text()[1]','VARCHAR(MAX)');

输出

ROUND(( @X  +  @Y ) /  @Z ,2 )

最新更新