oracle如何模糊查找 oracle模糊查询instr

如何对ORACLE里的CLOB字段进行模糊查询建议使用全文检索(FULL TEXT SEARCH) 。
用ORACLE8i中的intermedia text或者oracle9i的text对CLOB字段建一个CTXSYS.CONTEXT 类型的索引, 然后在查询时用CONTAIN作为查询条件.代码如下:--创建表CREATE TABLE tb_clob(
userid NUMBER PRIMARY KEY,
text CLOB);--建立索引CREATE INDEX search_idx
ON tb_clob(text)
INDEXTYPE IS ctxsys.CONTEXT;--查询SELECT COUNT(*)
在oracle中数字怎么模糊查询LIKE 模糊查询
字符匹配操作可以使用通配符 “%” 和 “_”:
%:表示任意个字符 , 包括零个;
_:表示一个任意字符;
Connected to aspx?tid=12" target="_blank" title="Oracle"Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as scott
SQL select * from dept;
DEPTNO DNAMELOC
------ -------------- -------------
10 ACCOUNTINGNEW YORK
20 RESEARCHDALLAS
30 SALESCHICAGO
40 OPERATIONSBOSTON
"%" 和 "_"演示:
SQL select * from dept where DNAME like '_A%';
DEPTNO DNAMELOC
------ -------------- -------------
【oracle如何模糊查找 oracle模糊查询instr】30 SALESCHICAGO
ESCAPE 演示:
SQL insert into dept values(50,'BEIJING','JIANG%XI');
1 row inserted
SQL select * from dept;
DEPTNO DNAMELOC
------ -------------- -------------
10 ACCOUNTINGNEW YORK
20 RESEARCHDALLAS
30 SALESCHICAGO
40 OPERATIONSBOSTON
50 BEIJINGJIANG%XI
SQL select * from dept where loc like '%\%%' escape '\';
DEPTNO DNAMELOC
------ -------------- -------------
50 BEIJINGJIANG%XI
SQL select * from dept where loc like '%e%%' escape 'e';
DEPTNO DNAMELOC
------ -------------- -------------
50 BEIJINGJIANG%XI
如何对ORACLE里的CLOB字段进行模糊查询?语法:select * from TABLE表 where\x0d\x0adbms_lob.instr(字段名(clod类型),'查询条件',1,1)0\x0d\x0a\x0d\x0acreate table products(\x0d\x0aproductid number(10) not null,\x0d\x0aname varchar2(255),\x0d\x0adescription CLOB);\x0d\x0a\x0d\x0a查询语句:\x0d\x0a\x0d\x0aselect t.productid, t.name from products t\x0d\x0a\x0d\x0awhere dbms_lob.instr(t.description, 'aaa', 1, 1)0;\x0d\x0a\x0d\x0a在Oracle中,可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符 。其语法为:\x0d\x0ainstr(sourceString,destString,start,appearPosition).\x0d\x0a其中sourceString代表源字符串;destString代表想聪源字符串中查找的子串;start代表查找的开始位置,该参数可选的,默认为\x0d\x0a1;appearPosition代表想从源字符中查找出第几次出现的destString,该参数也是可选的,默认为1;如果start的值为负数,那\x0d\x0a么代表从右往左进行查找 。\x0d\x0a返回值为:查找到的字符串的位置 。
oracle 中Like 后面如何用字段名进行模糊查询,而不是用字符串 。1、首先双击桌面plsql developer软件启动软件oracle如何模糊查找,在连接窗口中填写连接信息oracle如何模糊查找,连接数据库 。
2、连接成功后新建命令窗口oracle如何模糊查找,在sql查询中一般情况下对于数据比较少oracle如何模糊查找的表都会使用普通查询进行查询数据oracle如何模糊查找,如下图 。
3、有的时候针对数据量比较大,而又不太确定查询目录的表在进行查询的时候,就需要进行模糊查询 , 使用关键字Like,如下图查询出职工姓名第二个字符是o的职工信息 。
4、种模糊查询的方式只能针对字符串类型的数据列进行查询 , 其它类型的数据是无法查询出结果的,如下图 。
5、除了模糊查询之外还有反向模糊查询,not like,它的使用就是根据查询条件查询满足查询条件以外的数据 。
如何提高oracle模糊查询的性能?1、使用两边加‘%’号的查询,Oracle是不通过索引的,所以查询效率很低 。
例如:select count(*) from lui_user_base t where t.user_name like '%cs%';
2、like '...%'和 like'%...'虽然走了索引,但是效率依然很低 。
3、有人说使用如下sql , 他的效率提高了10倍,但是数据量小的时候
select count(*) from lui_user_base where rowid in (select rowid from lui_user_base t where t.user_name like '%cs%')
我拿100w跳数据做了测试,效果一般 , 依然很慢,原因:
select rowid from lui_user_base t where t.user_name like '%cs%'这条sql执行很快,那是相当的快 , 但是放到select count(*) from lui_user_base where rowid in()里后,效率就会变的很慢了 。
4、select count(*) from lui_user_base t where instr(t.user_name,'cs') 0
这种查询效果很好,速度很快 , 推荐使用这种 。因为我对oracle内部机制不是很懂,只是对结果做了一个说明 。
5、有人说了用全文索引,我看了,步骤挺麻烦 , 但是是个不错的方法,留着备用:
对cmng_custominfo 表中的address字段做全文检索:
1,在oracle9201中需要创建一个分词的东西:
BEGIN
ctx_ddl.create_preference ('SMS_ADDRESS_LEXER', 'CHINESE_LEXER');
--ctx_ddl.create_preference ('my_lexer', 'chinese_vgram_lexer'); 不用
end;
2,创建全文检索:
CREATE INDEX INX_CUSTOMINFO_ADDR_DOCS ON cmng_custominfo(address) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('LEXER SMS_ADDRESS_LEXER');
3,查询时候 , 使用:
select * from cmng_custominfo where contains (address, '金色新城')1;
4,需要定期进行同步和优化:
同步:根据新增记录的文本内容更新全文搜索的索引 。
begin
ctx_ddl.sync_index('INX_CUSTOMINFO_ADDR_DOCS');
end;
优化:根据被删除记录清除全文搜索索引中的垃圾
begin
ctx_ddl.optimize_index('INX_CUSTOMINFO_ADDR_DOCS', 'FAST');
end;
5,采用job做步骤4中的工作:
1)该功能需要利用oracle的JOB功能来完成
因为oracle9I默认不启用JOB功能,所以首先需要增加ORACLE数据库实例的JOB配置参数:
job_queue_processes=5
重新启动oracle数据库服务和listener服务 。
2)同步 和 优化
--同步 sync:
variable jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.sync_index(''INX_CUSTOMINFO_ADDR_DOCS'');',
SYSDATE, 'SYSDATE(1/24/4)');
commit;
END;
--优化
variable jobno number;
begin
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.optimize_index(''INX_CUSTOMINFO_ADDR_DOCS'',''FULL'');', SYSDATE, 'SYSDATE1');
commit;
END;
其中 , 第一个job的SYSDATE(1/24/4)是指每隔15分钟同步一次,第二个job的SYSDATE1是每隔1天做一次全优化 。具体的时间间隔,可以根据应用的需要而定 。
6,索引重建
重建索引会删除原来的索引,重新生成索引,需要较长的时间 。
重建索引语法如下:
ALTER INDEX INX_CUSTOMINFO_ADDR_DOCS REBUILD;
据网上一些用家的体会,oracle重建索引的速度也是比较快的,有一用家这样描述:
Oracle 的全文检索建立和维护索引要比ms sql server都要快得多 , 笔者的65万记录的一个表建立索引只需要20分钟,同步一次只需要1分钟 。
因此,也可以考虑用job的办法定期重建索引 。
oracle如何模糊查找的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于oracle模糊查询instr、oracle如何模糊查找的信息别忘了在本站进行查找喔 。

    推荐阅读