使用Oracle REGEXP_INSTR查找精确单词
我想使用使用Oracle REGEXP_INSTR查找精确单词,regex,oracle,Regex,Oracle,我想使用REGEXP\u INSTR从字符串返回以下位置 我正在寻找单词car,它在以下字符串中精确匹配 car,care,oscar - 1 care,car,oscar - 6 oscar,care,car - 12 差不多 SELECT REGEXP_INSTR('car,care,oscar', 'car', 1, 1) "REGEXP_INSTR" FROM DUAL; 我不确定要使用哪种类型的转义运算符。以下查询处理所有情况。如果字符串以car、开头,或者整个字符串只是car,则
REGEXP\u INSTR
从字符串返回以下位置
我正在寻找单词car,它在以下字符串中精确匹配
car,care,oscar - 1
care,car,oscar - 6
oscar,care,car - 12
差不多
SELECT REGEXP_INSTR('car,care,oscar', 'car', 1, 1) "REGEXP_INSTR" FROM DUAL;
我不确定要使用哪种类型的转义运算符。以下查询处理所有情况。如果字符串以
car、
开头,或者整个字符串只是car
,则返回起始位置。如果找到,car,
,或者字符串以,car
结尾,则返回起始位置+1,以说明逗号
SELECT
CASE
WHEN REGEXP_LIKE('car,care,oscar', '^car,|^car$') THEN REGEXP_INSTR('car,care,oscar', '^car,|^car$', 1, 1)
WHEN REGEXP_LIKE('car,care,oscar', ',car,|,car$') THEN REGEXP_INSTR('car,care,oscar', ',car,|,car$', 1, 1)+1
ELSE 0
END "REGEXP_INSTR"
FROM DUAL;
有了各种可能性一个更简单的解决方案是用逗号包围源字符串和搜索字符串,并使用INSTR查找位置
SELECT INSTR(',' || 'car,care,oscar' || ',', ',car,') "INSTR" FROM DUAL;
例如:
我喜欢诺尔的回答,因为它表现得非常好!另一种方法是从字符分隔的字符串中创建单独的行: pm.nodes='a;BCDEFg'
(select regexp_substr(pm.nodes,'[^;]+', 1, level)
from dual
connect by regexp_substr(pm.nodes, '[^;]+', 1, level) is not null)
(select regexp_substr(pm.nodes,'[^;]+', 1, level)
from dual
connect by regexp_substr(pm.nodes, '[^;]+', 1, level) is not null)