如何使用SQL Server在`=`之前和之后交换值?

时间:2015-08-21 11:07:34

标签: sql-server swap

我已声明并将参数@Data中的值设为ACCOUNT_NO|none|M=ACCOUNT_NO,ADD1|none|M=ADD1

我需要获得ACCOUNT_NO=ACCOUNT_NO|none|M,ADD1=ADD1|none|M的结果。

这意味着我需要在=

之前和之后交换值
Declare @Data varchar(100);

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

select @Data

如何使用SQL Server在=之前和之后交换值?

如果我执行查询ACCOUNT_NO=ACCOUNT_NO|none|M,ADD1=ADD1|none|M,则预期输出。任何人都可以提出这样做​​的想法吗?

1 个答案:

答案 0 :(得分:2)

试试这个:

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
*/