我需要将string1
与string2
中的逗号分隔值进行匹配,而不必分割string2
。例如,给定:
String1: 'abc'
String2: '123,fgh,abc,tg,sd'
string1
应该与string2
进行比较,并且应该返回true,因为' abc'是string2
的一部分。有办法吗?
请注意。 INSTR()并没有解决这个问题。如果string2 is
:'123,efabcde,34'
它将返回true,但我只需要用逗号分隔值进行比较("整个单词")
答案 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') 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的解决方案紧凑。