本文导航
展开本文导航
正文
1.问题描述,很多时候我们进行查询时要使用like关键字,MySQL和Oracle中都支持like进行模糊查询,像这样,
t.name like ‘%张三%‘,但是今天忽然发现了一个oracle中和like功能一样的关键字instr,这个关键字可以起到和like一样的作用,但是效率却要比like高很多。下面介绍一下这个神奇的instr关键字。
instr(string1,string2,[开始查找的位置,查找第几次])
instr关键字包含4个参数,第一个是源字符串,第二个是要在源字符串中进行匹配的字符串,后面两个参数已经做过介绍,一般用前面两个参数。
instr返回值是匹配到的字符串位于源字符串中的位置,如:
select instr(‘abc’,‘a’) from t 返回1,可以看出是从1开始计数的
select instr(‘abca’,‘a’,2) from t 返回4,从第二个位置开始查找a
select instr(‘abc’,‘a’,2,2) from t 返回0,查不到会返回0
如果要实现和like一样的过滤功能,则可以在where条件后面加,如:
select * from t where instr(t.name,‘张三’) >0 这句的效果就是 t.name like ‘%张三%’,
如果要是not like,直接把条件改为 =0即可。
注意:实现和like一样的模糊查询时放在where条件后面的。
至于instr为什么会比like查询效率高,目前还没搞清楚。
2.问题描述:在行级触发器找中利用序列表进行自增,但是发现一个没有用过的oracle函数,lpad。
lpad是从左侧开始进行填充,lapd(准备被填充的字符串,填充的长度[length],用什么进行填充);举例说明:
lpad(projectcode.NEXTVAL,8,0),一共要填充八位,用0填充。
于此函数对应的rpad,是从右边开始填充。