对于instr函数,我们经常这样使用:从一个字符串中查找指定子串的位置。例如:
SQL> select instr('oracle','or') position from dual;
POSITION
----------
从字符串'oracle'的第一个位置开始,向后查找第一个出现子串'or'出现的位置。
其实instr共有4个参数,格式为“instr(string, substring, startposition, occurrence)”。可实现子串的如下搜索:
1.从指定位置开始搜索子串
2.指定搜索第几次出现的子串的位置
3.从后向前搜索
--1.从第3个字符开始搜索
SQL> select instr('oracleor','or', 3) position from dual;
POSITION
----------
--2.从第1个字符开始,搜索第2次出现子串的位置
SQL> select instr('oracleor','or', 1, 2) position from dual;
POSITION
----------
--3.从倒数第1个字符开始,搜索第1次出现子串的位置
SQL> select instr('oracleor','or', -1, 1) position from dual;
POSITION
----------
--3.从倒数第1个字符开始,搜索第2次出现子串的位置
SQL> select instr('oracleor','or', -1, 2) position from dual;
POSITION
----------
oracle用instr代替like
表中将近有100万数据,很多时候,我们要进行字符串匹配,在SQL语句中,我们通常使用like来达到我们搜索的目标。但经过实际测试发现,like的效率与instr函数差别相当大。下面是一些测试结果:
SQL> set timing on
SQL> select count(*) from t where instr(title,’oracle’)>0;
COUNT(*)
———-
5478
Elapsed: 00:00:11.04
SQL> select count(*) from t where title like ‘%oracle%’;
COUNT(*)
———-
5478
Elapsed: 00:00:31.47
SQL> select count(*) from t where instr(title,’oracle’)=0;
COUNT(*)
———-
994530
Elapsed: 00:00:11.31
SQL> select count(*) from t where title not like ‘%oracle%’;
COUNT(*)
———-
994530
instr(title,'oracle’)>0 相当于like
instr(title,'oracle’)=0 相当于not like
oracle instr函数对于instr函数,我们经常这样使用:从一个字符串中查找指定子串的位置。例如:SQL> select instr('oracle','or') position from dual;POSITION---------- 1从字符串'oracle'的第一个位置开始,向后查找第一个出现子串'or'出现的位置。其实instr共
instr
(title,'手册')>0 相当于 title like '%手册%'
instr
(title,'手册')=1 相当于 title like '手册%'
instr
(title,'手册')=0 相当于 title not like '%手册%'
t表中将近有1100万数据,很多时候,我们要进行字符串匹配,在
SQL
语句中,我们通常使用like来达到我们搜索的目标。但经过实际
测试
发现,like的效率与
instr
函数
差别相当大。下面是一些
测试
结果:
SQL
> set timing on
SQL
> select count(*) from t where
instr
(tit
一、my
Sql
中IFNULL的使用说明
IFNULL(expr1,expr2)
如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。IFNULL()返回一个数字或字符串值
二、concat的使用说明
my
sql
CONCAT(str1,str2,…)
返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。或许有一个或多...
SQL
中经常会遇到模糊查询,现在模糊查询正常、最常用的有两种,一种是like、另一种是
instr
,这两种单单是简单的搜索,
instr
的效率是比like要高的(这也得看%在哪儿了)。
like中分右模糊、左模糊,右模糊比如’abc%‘时,扫描索引,高效。当模糊查询含左模糊时,比如’%abc’,进行全表扫描,低效。当然更别提’%abc%'了。
instr
instr
(字段名, string),
instr
的使用也很简单,就是填写一下字段名,然后与后面需要查找的内容相关。这个比like的左模糊效率
1、
instr
函数
instr
函数
是一个字符串处理
函数
,它在
Oracle
/PL
SQL
中是返回子字符串在源字符串中的位置,如果在源串中没有找到子串,则返回0。
instr
函数
定义如下:
* 返回子字符串在源字符串中的位置(字符串位置从1开始,而不是从0开始)
* @param str 源字符串
* @param substr 子字符串
* @para...
–
instr
(HXJYLSH,‘A’)效率和LIKE效率比较
SELECT COUNT() FROM EAST3_NBFHZMXJL_OI WHERE
instr
(HXJYLSH,‘A’)>0; --294.14
SELECT COUNT() FROM EAST3_NBFHZMXJL_OI WHERE HXJYLSH LIKE ‘%A%’; --310.91
(1)
instr
是一个
函数
,可以建立
函数
索引,如果过滤条件有索引,那么
instr
的效率将大幅度提高;
(2)like查询时,以’%'开头
下面我们使用
Oracle
来使用LIKE语句来查询数据,LIKE语句可以选择类似的值,它其中的%就代表着一个零或者多个字符,_代表一个字符,%与_可以同时使用,LIKE语句并且可以和ESCAPE标识符选择%和_符号一起使用。下面这个例子是使用LIKE语言模糊的查询工种的ID是“IT”的。
下面是LIKE使用的截图:
下面我们使用
Oracle
来使用LIKE语句来查询数据,LIKE语句可以选择类似的值...
Oracle
数据库提供的工具
函数
instr
,用于查找字符串的位置。此
函数
经常使用到,但使用的时候需要注意一些事项,接下来进行具体说明。
首先,我们了解下
函数
instr
,它有四个参数;source, target [, start_position] [, nth_appearance ];
source为原字符串;
target为要查找的字符串;
start_position为开始位置,可选项;
nth_appearance为匹配序号,即target第几次出现的位置...
oracle
函数
可以分为基本
函数
和分析
函数
两大类,在联机事务处理系统中,基本
函数
的使用非常多;而在以数据仓库为基础的数据分析中,
除了基本
函数
,也会用到分析
函数
。1.ASCII(c1):c1表示一个字符串,此
函数
返回c1首字母及特殊字符的ASCII码,其逆
函数
为CHR().
SQL
> select ASCII('a') ascii_a from dual; ASCII_A
----------
今天处理复杂业务,发现需要查出A表中的a字段存在B表中的b字段,不想写Java代码处理,尝试使用
sql
语句处理,发现
INSTR
可以处理这种场景业务。
举个
sql
栗子:
SELECT DISTINCT
Q1.id,
Q1. CODE,
Q1.codeRepty
queryreptycode AS Q1 INNER JOINqueryreptycode AS Q2
WHERE
INSTR
(
Q1.`code`,
Q2.codeRepty
INSTR
(STR,SUBSTR)
在一个字符串(STR)中搜索指定的字符(SUBSTR),返回发现指定的字符的位置(INDEX);
STR 被搜索的字符串 ,SUBSTR 希望搜索的字符串 。
结论:在字符串STR里面,字符串SUBSTR出现的第一个位置(INDEX),INDEX是从1开始计算,如果没有找到就直接返回0,没有返回负数的情况。
LIKE匹配关键字
注意:"[]"通配符My
Sql
不支持
INSTR
和 LIKE 的使用
(1)
instr
>0 和like、
instr
=0 和no
在
Oracle
中like是经常用到的,但是对于数据比较多的查询使用like这种模糊查询效率会比较低,所以可以尝试用
instr
代替
like进行查询。用法:
instr
(‘源字符串/列名’,’目标字符串’) >0 相当于 like
instr
(‘源字符串/列名’,’目标字符串’) = 0 相当于 not like
另外,对于大小写不固定的like也可以用regexp_like
**语法:
instr
(sourceString,destString,start,appearPosition)
instr
(’源字符串’ , ‘目标字符串’ ,’开始位置’,’第几次出现’)**
1.sourceString代表源字符串; destString代表要从源字符串中查找的子串;
2.start代表查找的开始位置,这个参数可选的,默认为1;
3.appearPositio...
select c.ci_id,wm_concat(s.stu_name)
from pm_ci c,pm_stu s
where
instr
(c.stu_ids,s.stu_id)>0
group by ci_id
在一些查询时,可能把握不准需要查询的确切值,比如百度搜索时输入关键字即可查询出相关的结果,这种查询称为模糊查询。
模糊查询使用LIKE关键字通过字符匹配检索出所需要的数据行。字符匹配操作可以使用通配符“%”和“_”:
%:表示零个或者多个任意字符。_:代表一个任意字符。
语法是:LIKE '字符串'[ESCAPE '字符']。匹配的字符串中,ESCAPE后面的“字符”作为转义字符。
通配符表达...
在 Postgre
SQL
中,可以使用 strpos
函数
来实现类似于
Oracle
的
instr
函数
的功能。例如,可以使用以下语句来查找字符串 'hello world' 中是否包含子字符串 'world':
SELECT strpos('hello world', 'world');
该语句将返回子字符串 'world' 在字符串 'hello world' 中的起始位置,如果子字符串不存在,则返回 。