gpt4 book ai didi

oracle - 如何使用Oracle交换 `=`之前和之后的值?

转载 作者:行者123 更新时间:2023-12-02 08:35:22 26 4
gpt4 key购买 nike

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

我需要得到的结果为 ACCOUNT_NO=ACCOUNT_NO|none|M,ADD1=ADD1|none|M

这意味着我需要在=之前和之后的值之间交换

我有SQL Server Query为了实现这一点,但我需要 Oracle 查询。

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,'');

执行查询ACCOUNT_NO=ACCOUNT_NO|none|M,ADD1=ADD1|none|M时的预期输出。任何人都可以提出做这个的想法吗?

最佳答案

听起来像是 REGEXP_REPLACE 的工作:

WITH datatab as (select 'ACCOUNT_NO|none|M=ACCOUNT_NO,ADD1|none|M=ADD1' info from dual)
select info,
regexp_replace(info, '([^=]+)=([^=,]+),([^=]+)=([^=,]+)', '\2=\1,\4=\3') new_info
from datatab;

INFO NEW_INFO
--------------------------------------------- ---------------------------------------------
ACCOUNT_NO|none|M=ACCOUNT_NO,ADD1|none|M=ADD1 ACCOUNT_NO=ACCOUNT_NO|none|M,ADD1=ADD1|none|M

(顺便说一句,这是我第一次编写正则表达式并且第一次让它工作。显然,我已经走向了黑暗面...... *{;-) )

ETA:如果您在过程/函数中需要此功能,则无需费心选择正则表达式,可以直接在 PL/SQL 中完成。

下面是返回交换结果的函数示例:

create or replace function swap_places (p_data in varchar2)
return varchar2
is
begin
return regexp_replace(p_data, '([^=]+)=([^=,]+),([^=]+)=([^=,]+)', '\2=\1,\4=\3');
end swap_places;
/

-- example of calling the function to check the result
select swap_places('ACCOUNT_NO|none|M=ACCOUNT_NO,ADD1|none|M=ADD1') col1 from dual;

COL1
-------------------------------------------------
ACCOUNT_NO=ACCOUNT_NO|none|M,ADD1=ADD1|none|M

关于oracle - 如何使用Oracle交换 `=`之前和之后的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32141376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com