Sql oracle在输入字符串中搜索单词
我必须找出在另一个管道分隔的字符串中找到的输入字符串单词,我正在尝试下面的方法,但它意外地返回“Y”而不是“N”。请让我知道在下面的cast语句中我做错了什么Sql oracle在输入字符串中搜索单词,sql,oracle,Sql,Oracle,我必须找出在另一个管道分隔的字符串中找到的输入字符串单词,我正在尝试下面的方法,但它意外地返回“Y”而不是“N”。请让我知道在下面的cast语句中我做错了什么 CASE WHEN REGEXP_INSTR('TCS|XY|XZ','CS',1,1,1,'i') > 0 THEN 'Y' ELSE 'N' END 问候, Raj第一个字段(TCS)包含CS,CS被视为匹配项 如果要匹配整个字段,可以执行以下操作: CASE WHEN
CASE
WHEN REGEXP_INSTR('TCS|XY|XZ','CS',1,1,1,'i') > 0
THEN 'Y'
ELSE 'N'
END
问候,
Raj第一个字段(TCS)包含CS,CS被视为匹配项
如果要匹配整个字段,可以执行以下操作:
CASE
WHEN REGEXP_INSTR('|' || 'TCS|XY|XZ' || '|' , '\|' || 'CS' || '\|',1,1,1,'i') > 0
THEN 'Y'
ELSE 'N'
END
将分隔符添加到查询字符串中,以“锚定”整个字段的搜索。为了能够匹配第一个和最后一个字段,我还将分隔符添加到搜索的字符串中。第一个字段(TCS)包含CS,CS作为匹配项
如果要匹配整个字段,可以执行以下操作:
CASE
WHEN REGEXP_INSTR('|' || 'TCS|XY|XZ' || '|' , '\|' || 'CS' || '\|',1,1,1,'i') > 0
THEN 'Y'
ELSE 'N'
END
将分隔符添加到查询字符串中,以“锚定”整个字段的搜索。为了能够匹配第一个和最后一个字段,我还向搜索的字符串添加了分隔符。实际上没有必要使用
regexp\u instr()
正则表达式函数。如果您只需要知道某个特定字符文字是否是另一个字符文字的一部分,instr()
函数将完全满足您的需要:
with t1(col) as(
select 'TCS|XY|XZ' from dual union all
select 'TAB|XY|XZ' from dual
)
select col
, case
when instr(col, 'CS') > 0
then 'Y'
else 'N'
end as Is_Part
from t1
结果:
COL IS_PART
--------- -------
TCS|XY|XZ Y
TAB|XY|XZ N
COL RES
---------- ---
TCS|XY|XZ| NO
编辑
如果需要考虑竖条-仅当竖条包围着独立的
CS
子字符串时才返回yes,那么可以使用regexp\u instr()
正则表达式函数,如下所示:
with t1(col) as(
select 'TCS|XY|XZ|' from dual
)
select col
, case
when regexp_instr(col, '(\||^)CS(\||$)', 1, 1, 0, 'i') > 0
then 'YES'
else 'NO'
end as res
from t1
结果:
COL IS_PART
--------- -------
TCS|XY|XZ Y
TAB|XY|XZ N
COL RES
---------- ---
TCS|XY|XZ| NO
注意:如果字符文字是动态的,您可以使用串联运算符
|
来形成搜索模式'(\| ^)| | | | | |'(\| |$)
,实际上没有必要使用regexp|instr()
正则表达式函数。如果您只需要知道某个特定字符文字是否是另一个字符文字的一部分,instr()
函数将完全满足您的需要:
with t1(col) as(
select 'TCS|XY|XZ' from dual union all
select 'TAB|XY|XZ' from dual
)
select col
, case
when instr(col, 'CS') > 0
then 'Y'
else 'N'
end as Is_Part
from t1
结果:
COL IS_PART
--------- -------
TCS|XY|XZ Y
TAB|XY|XZ N
COL RES
---------- ---
TCS|XY|XZ| NO
编辑
如果需要考虑竖条-仅当竖条包围着独立的
CS
子字符串时才返回yes,那么可以使用regexp\u instr()
正则表达式函数,如下所示:
with t1(col) as(
select 'TCS|XY|XZ|' from dual
)
select col
, case
when regexp_instr(col, '(\||^)CS(\||$)', 1, 1, 0, 'i') > 0
then 'YES'
else 'NO'
end as res
from t1
结果:
COL IS_PART
--------- -------
TCS|XY|XZ Y
TAB|XY|XZ N
COL RES
---------- ---
TCS|XY|XZ| NO
注意:如果字符文字是动态的,您可以使用串联运算符
|
来形成搜索模式'(\| ^)| | | | | |'(\| |$)
这是不正确的,请在插入时选择大小写('TCS','CS'))>0然后'Y'else'N'结束,作为DUAL的一部分。这仍然返回'Y'@raj当然它会返回yes,因为CS
是TCS
的一部分。如果什么时候返回是和什么时候返回否有不同的标准,你需要在问题中清楚地说明。我想搜索准确的单词。如果输入字符串是TCS,那么只有它应该返回是。如果输入字符串是“CS”或TC,那么它应该返回否。基本上它应该检查准确的单词。它工作得很好,如何动态地传递字符文本,即CSTHanks,这是有意义的。这是不正确的,当instr('TCS','CS')>0时选择大小写,然后选择“Y”或“N”结束,因为它是DUAL的一部分。这仍然返回“Y”@raj,当然它将返回yes,因为CS
是TCS
的一部分。如果什么时候返回是和什么时候返回否有不同的标准,你需要在问题中清楚地说明。我想搜索准确的单词。如果输入字符串是TCS,那么只有它应该返回是。如果输入字符串是“CS”或TC,那么它应该返回否。基本上它应该检查准确的单词。它工作得很好,如何动态地传递字符文本,即cstanks,这是有意义的。这也是错误的。当REGEXP|u INSTR(“|”|“|”| TCS | XY | XZ”| |“|”|“CS”| |“|”,1,1,'i')>0,然后“Y”ELSE“N”结束返回“Y”,我忘了在正则表达式中反斜杠
。我现在修复了它并尝试了它,它为CS
返回N
,为TCS
返回Y
。这也是错误的。当REGEXP_INSTR(“|”| |“TCS | XY | XZ”| | |“CS”| |“CS”| |“I”|“I”|时,1,1,'I')。我现在修复并尝试了它,对于CS
它返回N
,对于TCS
它返回Y
。