Oracle 比较;string1";用逗号分隔;string2";不分裂

Oracle 比较;string1";用逗号分隔;string2";不分裂,oracle,plsql,oracle11g,Oracle,Plsql,Oracle11g,我需要将string1与string2中的逗号分隔值匹配,而不拆分string2。例如,假设: String1: 'abc' String2: '123,fgh,abc,tg,sd' string1应与string2进行比较,并应返回true,因为'abc'是string2的一部分。有什么办法吗 注意。INSTR()不能解决这个问题。如果string2是:'123,efabcde,34'它将返回true,但我只需要比较逗号分隔的值(“整词”)希望这对您有所帮助 INSTR2('123,fgh,

我需要将
string1
string2
中的逗号分隔值匹配,而不拆分
string2
。例如,假设:

String1: 'abc'
String2: '123,fgh,abc,tg,sd'
string1
应与
string2
进行比较,并应返回true,因为'abc'是
string2
的一部分。有什么办法吗


注意。INSTR()不能解决这个问题。如果
string2是
'123,efabcde,34'
它将返回true,但我只需要比较逗号分隔的值(“整词”)

希望这对您有所帮助

INSTR2('123,fgh,abc,tg,sd.com', 'abc')
你可以使用函数

以下是一个适用于您的案例的示例

with mydata as (
select '123,fgh,abc,tg,sd' d from dual 
union 
select '123,fgh,abcd,tg,sd' d from dual
union 
select 'abc,123,fgh,abcd,tg,sd' d from dual
union 
select 'abcd,xabc' d from dual
union 
select 'abc' d from dual
)
select d,
case 
   when REGEXP_LIKE(d,',abc,|^abc,|,abc$|^abc$') 
   then 'Y'
   else 'N'
end as res_y_n
from mydata
以及结果

123,fgh,abc,tg,sd       Y
123,fgh,abcd,tg,sd      N
abc                     Y
abc,123,fgh,abcd,tg,sd  Y
abcd,xabc               N

如果str是包含逗号分隔字符串列表的字符串,则

  • str等于abc
  • str等于abc
  • str等于…,abc
  • str等于…,abc
。。。是一个任意字符串

您可以使用字符串函数、字符串运算符或正则表达式来检查这一点。使用得到的字符串运算符

(str = 'abc') or 
(str like 'abc,%') or 
(str like '%,abc') or 
(str like '%,abc,%')
如果您搜索的字符串(本例中为abc)包含字符%或uu,则必须引用它们,因为它们在类似表达式中具有特殊含义。您还必须引用引号字符。所以如果你搜索10%,你会使用

(str = '10%') or 
(str like '10\%,%') escape '\' or 
(str like '%,10\%') escape '\' or 
(str like '%,10\%,%') escape '\' 
与使用LIKE或字符串函数的解决方案相比,使用REGEXP_-LIKE的正则表达式解决方案看起来更紧凑,但您必须引用更多的特殊字符


如果使用字符串函数(使用INSTR、SUBSTR、LENGTH),则没有特殊字符,但解决方案不如使用LIKE的此解决方案紧凑。

Hi,您尝试过INSTR吗?如果string2为:“123,efabcde,34”,则INSTR不起作用。它会变成真的。但是我只需要比较逗号分隔的值,这样就可以在str2(String2,,“| | String1 | |,”)或SUBSTR(String2,1,LENGTH(String1))=String1或SUBSTR(String2,-1*LENGTH(String1)+1)=,”||String1@hmmftg我不认为你是对的(你的第二个案例接受“abcd”)但是我认为你应该发布一个更正后的解决方案作为答案,而不是两次作为评论发布。@ShreedharMathad-为了将来的参考,请编辑你的问题以澄清你的要求。
INSTR2('123,fghabctg,sd.com,,'abc')
也是正确的,我不认为这是OPR2的意图,那么这就可以完成INSTR2的工作(String2’,“| | String1 | |,”)或SUBSTR(String2,1,LENGTH(String1))=String1或SUBSTR(String2,-1*LENGTH(String1)+1)=’,“| String1您有“^abc”,但“abc$”没有逗号?这很奇怪。