Sql 两种varchar的比较
我需要您的帮助来找到解决方案:Sql 两种varchar的比较,sql,oracle,Sql,Oracle,我需要您的帮助来找到解决方案: char1 : "1,2,3" char2 : "1,2,3,4,5" 并返回以下结果: char3 : "4,5" 我怎样才能做到这一点呢?像这样的事情 SQL> with test (char1, char2) as 2 (select '1,2,3', '1,2,3,4,5' from dual), 3 ch1 as 4 (select regexp_substr(char1, '[^,]+', 1, level) va
char1 : "1,2,3"
char2 : "1,2,3,4,5"
并返回以下结果:
char3 : "4,5"
我怎样才能做到这一点呢?像这样的事情
SQL> with test (char1, char2) as
2 (select '1,2,3', '1,2,3,4,5' from dual),
3 ch1 as
4 (select regexp_substr(char1, '[^,]+', 1, level) val
5 from test
6 connect by level <= regexp_count(char1, ',') + 1
7 ),
8 ch2 as
9 (select regexp_substr(char2, '[^,]+', 1, level) val
10 from test
11 connect by level <= regexp_count(char2, ',') + 1
12 )
13 --
14 select listagg(x.val, ',') within group (order by x.val) result
15 from
16 ( (select val from ch1
17 minus
18 select val from ch2
19 )
20 union
21 (select val from ch2
22 minus
23 select val from ch1
24 )
25 ) x;
RESULT
-----------------------------------------------------------------------
4,5
SQL>
还有一个变体:
with t as
( select
'1,2,3' as char1,
'1,2,3,4,5' as char2
from dual )
select listagg(coalesce(a.parsed_char,b.parsed_char),',') within group (order
by 1) as res
from ( select regexp_substr(char1, '[^,]+',1,level) as parsed_char
from t
connect by regexp_substr(char1, '[^,]+',1,level) is not null ) a
full join
( select regexp_substr(char2, '[^,]+',1,level) as parsed_char
from t
connect by regexp_substr(char2, '[^,]+',1,level) is not null ) b
on (a.parsed_char = b.parsed_char)
where a.parsed_char is null or b.parsed_char is null;
你的价值观是有序的吗?是否可以多次使用相同的值?这些值总是数字吗?char1总是char2的子字符串吗?如果是这样,它是否总是char2的第一部分?双引号是打字错误还是有什么意思?到目前为止,您尝试了什么?事实上,第一个字符串是动态影响的,它可以包含不同于我为示例修复的值!好吧,那么-你为什么不发这样一个例子呢?我原以为会是一样的,但我可能错了。每个字符串的值已经存储在两个变量中,比如var1和var2,因此处理将在var1和var2上进行。对不起,谢谢你的帮助