我有一个包含以下值的表:
ID NAME ADDRESS
1 Bob Super stree1 here goes
2 Alice stree100 here goes
3 Clark Fast left stree1005
4 Magie Right stree1580 here goes
我需要使用LIKE
进行查询,并且只获取stree1
的行(在这种情况下只获取ID为1的行)并使用以下查询:
select * from table t1 WHERE t1.ADDRESS LIKE '%stree1%';
但问题是我得到所有行,因为每个行都包含stree1
加上一些字符/数字。
我发现我可以使用REGEXP_LIKE
,因为我正在使用oracle,正确使用的正则表达式是什么:
select * from table t1 WHERE regexp_like(t1.ADDRESS ,'stree1');
答案 0 :(得分:4)
我认为这将是您正在寻求的注册:
select * from table t1 WHERE regexp_like(t1.ADDRESS ,'stree1(?:[^[:word:]]|$)');
如果您愿意,可以进一步简化为:
select * from table t1 WHERE regexp_like(t1.ADDRESS ,'stree1(?:\W|$)');
也就是说,'stree1'后面没有单词字符(即后跟空格/标点符号等),或者字符串末尾出现'stree1'。当然还有很多其他方法可以做同样的事情,包括单词边界'stree1 \ b',期待stree1中1之后的特定字符(例如,带有'stree1 \ s'的空格)等等...... / p>
答案 1 :(得分:0)
这可能有所帮助:
stree1\b
答案 2 :(得分:0)
第一个'\ W'告诉它它是一个非单词字符,因为你需要在'stree1'之后注意但是空格 并且'$'告诉它如果以stree1
结尾,则将其视为有效字符串select *
from table1
where regexp_like(address,'stree1(\W|$)')