oracle 优化 instr 替换 =
这两者不等价啊,前者是查位置,得到的值是位置,数字型,后者就是全部字符串是否等于‘测试’
instr函数效率 instr函数用法举例
instr函数效率 instr函数用法举例
instr函数效率 instr函数用法举例
单看这个条件,instr(字段,‘测试’) 没有字段=‘测试’ 条件效率高(没有instr(字段,‘测试’)函数索引的情况下)
sql语句查询,多字段like模糊查询优化
1、多字段like模糊查询优化:
常见的写法:
where a like '%xx%' or b like '%xx%' or c like '%xx%';
这种写法查询效率低,经过调查,下面的方法可以替代,并且效率高:
2、如果like的关键字相同:
where instr(nvl(a, '')||nvl(b,'')||nvl(c,''), 'xx') > 0
把要模糊查询的字段先拼接起来,拼接时需要把null转成‘’,否则只要有一个字段值是空,整个拼接的字符串都成空了, 然后用instr 函数去过滤;
3、如果like的关键字不同:
where instr(a, 'xx') > 0 or instr(b, 'yy') > 0 or instr(c, 'zz') > 0
经过测试,这两种方法都比like效率要高;
sql 模糊查询方法 sql语句里like有没有反向用法?
你的意思是不是bbbcccddd是一个字符串,str1是你表里的一个字段名,它里边有'','bbb','ccc'这些值,你要判断str1的值是不是在字符串里?
sql server可以用这个函数charindex(str1,'bbbcccddd')>0表示就含有,返回的是子字符串的位置从零开始。
oracle里是(str1,'bbbcccddd')>0意义相同.
下面方法试试:
SELECT FROM 表 WHERE '字符串' LIKE CONCAT('%',字段,'%')
这个要这么写:
Where ( '%'+str1+'%') like str2
'10003000800001' like F_CODE||'%'
怎么优化vb for循环的性能 循环70000次以上
arr = Split(Text3.Text, vbCrLf)
hang = (UBound(arr))
MsgBox hang
Label4.Caption = hang
Dim str1 As String '添加
For L = 0 To hang
st = arr(L) '修改
If st = "" Then Exit For
If RealLen(Mid(st, 1, InStr(1, st, ".") - 1)) < 6 And InStr(st, "") > 0 Then
str1 = str1 & st & vbCrLf '修改
End If
Label5.Caption = L
DoEvents
Next L
Text1.Text = str1 '添加
1,把text3中的内容保存到记事本中,
2,然后用open " 记事本" for input as #1 读取打开记事本;
3,用lineinput按行读取记事本内容;
4,用instr()函数判断每行内容是否包含,如果是则保存到另text中
5,用do...loop while not EOF(#1)读取所有的行
6,关闭记事本
把DoEvents去掉,应该会快一点
SQL字符串比较
要学会先搜索
以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符。
其语法为:
instr(sourceString,destString,start,appearPosition).
instr('源字符串'
,'目标字符串'
,'开始位置','第几次出现')
其中sourceString代表源字符串;
destString代表想聪源字符串中查找的子串;
start代表查找的开始位置,该参数可选的,默认为1;
appearPosition代表想从源字符中查找出第几次出现的destString,该参数也是可选的,默认为1;
如果start的值为负数,那么代表从右往左进行查找,但是位置数据仍然从左向右计算。
返回值为:查找到的字符串的位置。
对于instr函数,我们经常这样使用:从一个字符串中查找指定子串的位置。例如:
SQL>
select
instr('yuechaotianyuechao','ao')
ition
from
dual;
POSITION
----------
6从第7个字符开始搜索
SQL>
select
instr('yuechaotianyuechao','ao',
7)
ition
from
dual;
POSITION
----------
17
从第1个字符开始,搜索第2次出现子串的位置
SQL>
select
instr('yuechaotianyuechao','ao',
1,
2)
ition
from
dual;
POSITION
----------
17
注意:1。若‘起始位置’=0
时返回结果为0,
2。这里只有三个参数,意思是查找个要查找字符的位置(因为
‘第几次出现’默认为1),
当‘起始位置’不大于要查找的个字符的位置时,返回的值都将是个字符的位置,如果‘起始位置’大于要查找的个字符的位置时,返回的值都将是第2个字符的位置,依此类推……(但是也是以个字符开始计数)
写两个函数,得到前后两部分,再进行比较,但是这样效率比较低,如果经常要比较,就拆成两字段。你的数据是有规律的,中间用,分隔了呀。sql
server
示例如下:
declare
@value
varchar(100)
set
@value='123.0000,456.1111'
select
left(@value,
charindex(',',@value,0)-1)
--左边
select
right(@value,
len(@value)-
charindex(',',@value,0))
--右边
创建一个存储过程,创建两个参数:@a,@b,用函数charindex进行比较,如果@a中有@b相同字符,就放回在第几个字符数,否则就返回0。
CREATE
PROCEDURE
[CHAR]
@a
varchar(20),@b
varchar(20)
AS
begin
select
charindex(@a,@b,1)
end
GO
Oracle中使用多个like查询的问题
1、根据题意,SQL2应该不合符要求,另外SQL1和SQL2都没在strawberry加%。
SQL2: where 条件等价于:(b.context LIKE '%apple%') OR ( b.context LIKE '%banana%' AND b.context NOT LIKE 'strawberry')
语句效率应该相不多,性能都不好,因为都要全表扫描且字符串都要从头到尾匹配。如果性能相大,主要是你的语句1个LIKE 没用%,不要从头到尾匹配,这样可能SQL1更快。
2、类似对同一字段多次LIKE ,特别是比较耗时的,注意下数据的特点,尽量一次就过滤掉数据,如果是AND关系,数据不符合多的尽量放前面,如果是OR关系,数据符合多的尽量放前面。LIKE字符串尽量不要以%开头
sql2 的逻辑是错误的:
当数据中包含 apple,并且可能包含 strawberry也被选取出来了。
没有好的写法,涉及有like %xxx 的无法使用索引,所以效率无法提升。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至836084111@qq.com 举报,一经查实,本站将立刻删除。