oracle 字符串匹配查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 字符串匹配查询相关的知识,希望对你有一定的参考价值。

table T1

str
a,b,c
a,b,d
a,d,c

现在要查询表中的str字段,有那些数据包含了字符串a,c中任何一个字母的
这个SQL怎么写,数据库 oralce 11g
a,c是一个字符串!!,作为查询条件的参数的,不能拆开这个字符串

select t.* from t1 t where regexp_like(t.str,'[ac]');

oracle中的函数regexp_like,很好用的哦,其中[ac]为正则表达式,意思是,在str字段的数据里,匹配有包含a或者c的数据。具体请在网上查询oracle数据库中regexp_like函数的应用,希望能帮助你。

追问

查询结果不够精确,因为如果是字符串是a01,c02,就会查到不匹配的数据,后面的正则式该怎么写

追答

这是可以的啊,[ac]正则表达式的意思是,在所有的字符串中找到包含有a或者c的的字符串,如果字符串中有大写的那么就改成[aAcC]就可以了。

参考技术A 简单点就是这样:

select str from t1 where instr(str,'a')>0 or instr(str,'c')>0 or instr(str,',')>0) ;

或者使用正则表达式

select str from t1 where regexp_like(t.str,'[a,c]');
参考技术B select * from T1 where ','||str||',' like '%,a,%' or ','||str||',' like '%,c,%' 参考技术C select * from t1 where str like'%a%' or str like'%c%' 参考技术D select * from T1 where str like %a,c%;

oracle 中查询的模糊匹配

现在有一个表A如下
id value_a
1 1000
2 1001
3 1002
select value_a from A返回3条记录

现在有表B如下:
id value_B
1 10001
2 10011
3 20003
我想通过子查询 查询类似 select * from B where B.value_B like '1000%' or B.value_B like '1001%' 的结果

但select * from B where B.value_B in (select value_a from A)或者
select * from B where B.value_B like (select value_a from A)这样是不行的,
有什么方法可以得出我想要的查询?

select * from B where left(B.value_B,4) in (select value_a from A) 参考技术A select b.value ,a.value from b left join a on (b.value like '%' || a.value '%' || ) 参考技术B SELECT B.*
FROM B
INNER JOIN A
ON LEFT(B.value_B,4) = A.value_a

以上是关于oracle 字符串匹配查询的主要内容,如果未能解决你的问题,请参考以下文章

oracle10g中,如何查询正则表达式匹配指定字符串的匹配个数?

oracle10g中,如何查询正则表达式匹配指定字符串的匹配个数?

oracle中如何使用like来进行模糊匹配

如何在oracle查询中将字符与#匹配

oracle sql语言模糊查询

如何从 Oracle 表中获取几乎匹配的字符串?