将“string1”与逗号分隔的“string2”进行比较而不拆分
Posted
技术标签:
【中文标题】将“string1”与逗号分隔的“string2”进行比较而不拆分【英文标题】:compare "string1" with comma separated "string2" without splitting 【发布时间】:2017-05-22 04:33:11 【问题描述】:我需要将string1
与string2
中的逗号分隔值进行匹配,而不需要拆分string2
。例如,给定:
String1: 'abc'
String2: '123,fgh,abc,tg,sd'
string1
应该与string2
进行比较,并且应该返回true,因为'abc' 是string2
的一部分。有什么办法吗??
注意。 INSTR() 不能解决这个问题。如果 string2 is
: '123,efabcde,34'
它将返回 true 但我只需要与逗号分隔值(“整个单词”)进行比较
【问题讨论】:
您好,您尝试过INSTR吗? 如果 string2 为:'123,efabcde,34',则 INSTR 将不起作用。它会返回真。但我只需要与逗号分隔值进行比较 那么这将完成 INSTR2(String2, ','||String1||',') OR SUBSTR(String2, 1, LENGTH(String1))=String1 OR SUBSTR(String2, - 1* LENGTH(String1) + 1)=','||String1 @hmmftg 我不认为你是对的(你的第二个案例接受'abcd'),但我认为你应该发布一个更正的解决方案作为答案,而不是发布两次作为评论。 @ShreedharMathad - 以供将来参考,请编辑您的问题以阐明您的要求。 【参考方案1】:希望对你有帮助
INSTR2('123,fgh,abc,tg,sd.com', 'abc')
【讨论】:
INSTR2('123,fghabctg,sd.com', 'abc')
也是如此,我认为这不是 OP 的意图
那么这将完成工作 INSTR2(String2, ','||String1||',') 或 SUBSTR(String2, 1, LENGTH(String1 ))=String1 或 SUBSTR(String2, -1* LENGTH(String1) + 1)=','||String1【参考方案2】:
你可以使用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
【讨论】:
你有'^abc',但是'abc$'没有逗号?这很奇怪。【参考方案3】:如果 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 的解决方案紧凑。
【讨论】:
以上是关于将“string1”与逗号分隔的“string2”进行比较而不拆分的主要内容,如果未能解决你的问题,请参考以下文章
VB.NET 赋值字符串 ---- String1 = String1+String2
java查找string1和string2是不是含有相同的字母种类和数量(string1是否是string2的重新组合)