How to swap values between before and after `=` using SQL Server?

谁说我不能喝 提交于 2019-12-11 10:21:51

问题


I have declared and set a value in parameter @Data as ACCOUNT_NO|none|M=ACCOUNT_NO,ADD1|none|M=ADD1

I need to get a result as ACCOUNT_NO=ACCOUNT_NO|none|M,ADD1=ADD1|none|M.

Which means I need to swap between the values before and after =

Declare @Data varchar(100);

Set @Data ='ACCOUNT_NO|none|M=ACCOUNT_NO,ADD1|none|M=ADD1'

select @Data

How to swap the values between before and after = using SQL Server?

Expected Output if I execute the query ACCOUNT_NO=ACCOUNT_NO|none|M,ADD1=ADD1|none|M. Can anyone give an idea to do this one?


回答1:


Try this:

Declare @Data varchar(100)='ACCOUNT_NO|none|M=ACCOUNT_NO,ADD1|none|M=ADD1';

WITH
myCTE1 AS
(
    SELECT CAST('<root><r>' + REPLACE(@Data,',','</r><r>') + '</r></root>' AS XML) AS parts1
)
,myCTE2 AS
(
    SELECT CAST('<root><r>' + REPLACE(p1.x.value('.','varchar(max)'),'=','</r><r>') + '</r></root>' AS XML) as parts2 
    FROM myCTE1
    CROSS APPLY parts1.nodes('/root/r') AS p1(x)
)
SELECT STUFF
(
    (
        SELECT ',' + parts2.value('/root[1]/r[2]','varchar(max)') + '=' + parts2.value('/root[1]/r[1]','varchar(max)')
        FROM myCTE2
        FOR XML PATH(''),TYPE
    ).value('.','varchar(max)'),1,1,'');

/* Result
ACCOUNT_NO=ACCOUNT_NO|none|M,ADD1=ADD1|none|M
*/


来源:https://stackoverflow.com/questions/32138762/how-to-swap-values-between-before-and-after-using-sql-server

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!