将“string1”与逗号分隔的“string2”进行比较而不拆分

Posted

技术标签:

【中文标题】将“string1”与逗号分隔的“string2”进行比较而不拆分【英文标题】:compare "string1" with comma separated "string2" without splitting 【发布时间】:2017-05-22 04:33:11 【问题描述】:

我需要将string1string2 中的逗号分隔值进行匹配,而不需要拆分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 ))=String1SUBSTR(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”进行比较而不拆分的主要内容,如果未能解决你的问题,请参考以下文章

使用 readr 读取文本文件,其中引号结束行

在lua中拆分一次功能

VB.NET 赋值字符串 ---- String1 = String1+String2

包含string1的Grep行或包含string2的NOT

2017-10-27 课后作业02

java查找string1和string2是不是含有相同的字母种类和数量(string1是否是string2的重新组合)