700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > oracle右模糊查询 oracle模糊查询

oracle右模糊查询 oracle模糊查询

时间:2020-09-17 22:07:54

相关推荐

oracle右模糊查询 oracle模糊查询

leekiang 阅读(2036) 评论(1) 编辑 收藏 所属分类: oracle

需要查询某字段是否包含一个值111是否存在于1111,2111,1112,1121,1113,中 ,

因为根据","逗号分开,要求的答案是:不存在。

用传统的like '%111,%',显然不合适,这样虽然111不存在但是依然能查到该条记录。

所以应该用以下语句实现:

select * from Table where ','+columA like '%,111,%'

like '%AAA%' 这样的左右模糊查询不能用上索引,Oracle没法通过B-TREE找到相应的叶子节点,位图索引也是一样

而like '...%'和 Like '%...'是可以走索引的,后者需要reverse一下

使用where instr(column_name,'AAA')> 0没有什么效果

如果确定like部分选择性很强,试试:

select * from xxfl where rowid in (select rowid from xxfl where hphm like '%34443%' ) and jgsj between to_date('xxxx-xx-xx xx:xx:xx','yyyy-mm-dd hh24:mi:ss') and to_date('xxxx-xx-xx xx:xx:xx','yyyy-mm-dd hh24:mi:ss');

参考:

/topic/653713

/viewthread.php?tid=1218563

/post/4899/464369

别人的笔记:

sql中的like '%xx%'模糊查询无法走索引,影响执行速度。经测试itpub版主ifree的index_ffs+rowid方法比较有效,记录一下。

这里是示例:

scott@ORCL> CREATE INDEX SCOTT.i_dept_name

2 ON SCOTT.DEPT(DNAME)

3 ;

Index created.

scott@ORCL> Analyze Table SCOTT.DEPT Compute Statistics ;

Table analyzed.

scott@ORCL> select * from scott.dept where

2 rowid in (

3 select /*+ index_ffs(a i_dept_dname) */

4 rowid from scott.dept a where dname like '%A%')

5 ;

这个方法要求like查询出的记录不能太多,在我的应用中,这一方法使sql效率提高了近10倍。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。