比较" string1"用逗号分隔" string2"没有分裂

时间:2017-05-22 04:33:11

标签: oracle plsql oracle11g

我需要将string1string2中的逗号分隔值进行匹配,而不必分割string2。例如,给定:

String1: 'abc'
String2: '123,fgh,abc,tg,sd'

string1应该与string2进行比较,并且应该返回true,因为' abc'是string2的一部分。有办法吗?

请注意。 INSTR()并没有解决这个问题。如果string2 is'123,efabcde,34'它将返回true,但我只需要用逗号分隔值进行比较("整个单词")

3 个答案:

答案 0 :(得分:0)

希望这可以帮到你

INSTR2('123,fgh,abc,tg,sd.com', 'abc')

答案 1 :(得分:0)

您可以使用REGEXP_LIKE功能

以下是您的案例的示例

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

答案 2 :(得分:0)

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

  • str等于abc
  • str等于abc,...
  • str等于......,abc
  • str等于......,abc,...

...是一个任意字符串。

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

(str = 'abc') or 
(str like 'abc,%') or 
(str like '%,abc') or 
(str like '%,abc,%')

如果您搜索的字符串(本例中为abc)包含字符%或_,则必须引用它们,因为它们在LIKE表达式中具有特殊含义。您还必须引用引号字符。因此,如果您搜索10%,则使用

(str = '10%') or 
(str like '10\%,%') escape '\' or 
(str like '%,10\%') escape '\' or 
(str like '%,10\%,%') escape '\' 

使用REGEXP_LIKE的正则表达式解决方案看起来比使用LIKE或字符串函数的解决方案更紧凑,但是您需要引用更多特殊字符。

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