oracle like 和instr的差别

oracle like 和instr的差别,第1张

instr不属于模糊查询。

不知道你怎么会问这样的问题。

从效率角度来看:

谁能用到索引,谁的查询速度就会快。

like有时可以用到索引,例如:name like '李%'

而当下面的情况时索引会失效:name like '%李'

与其他数据库不同的是,oracle支持函数索引。例如在name字段上建个instr索引。查询速度就比较快了。

#####

但是有一个问题就是,无法通配出同字母不同大小写的数据

比如:数据库中有表A,字段test,test下有值testa,Testb

那么我做查询:

select from A where 1=1 and instr(test,'t')>0

时只能查询到testa的值,而匹配不到Testb的值

####

re:

1这个语句能同时匹配testa,Testb 啊!你的实际数据是什么,要根据数据而定!

2像你这个问题,用like 就搞定了:

select from A where lower(test) like 'test%';

test 下的值就变成:

testa >> testa

Testb >> testb

testa testb 都可以用 'test%' 匹配出来!

3比like 更强大的,就是正则表达式,如:REGEXP_LIKE,REGEXP_INSTR,能解决绝大部分的模糊匹配/替换的问题,非常值得你深入研究^^

有问题可以hi我。

##############

回3楼的,我用的是9i的数据库好么,你那几个函数是10g才支持的新函数。

还有我要的是能代替like的模糊查询

你有看清楚我的题目么?

####################

呵呵,原来你是这个意思啊,不好意思,理解错了。

那你可以借用外部存储过程(extproc),写个函数,调用外部函数,例如java函数,

利用java的正则表达式来实现模糊查询。

就是配置上有点麻烦。

InStr 函数是指定一个字符串在另一个字符串中最先出现的位置。

语法:InStr([start,]string1,string2[,compare])

其中:start:可选参数,数字,设置搜索的起点,如果省略,从第一个字符开始搜索。

string1:必要参数,被搜索的字符串。

string2:必要参数,需要搜索的字符串。

compare:可选参数。

compare的参数设置:-1:

0:二进制比较

1:执行原文的比较

2:在Access数据库中执行比较。

例如:A=InStr(2,"ABCDEFG","E"),返回值:5

你的问题是没有高清楚 start 是设置搜索的起点,如果 start > Len(string2),那么返回值是0,而不是 start > string2 因为一个是数字,一个是字符串,比较式不成立!!!!

Option Compare 语句

在模块级别中使用,用于声明字符串比较时所用的缺省比较方法。

语法

Option Compare {Binary | Text | Database}

说明

如果使用,则 Option Compare 语句必须写在模块的所有过程之前。

Option Compare 语句为模块指定字符串比较的方法(Binary、Text 或 Database)。如果模块中没有 Option Compare 语句,则缺省的文本比较方法是 Binary。

Option Compare Binary 是根据字符的内部二进制表示而导出的一种排序顺序来进行字符串比较。在 Microsoft Windows 中,排序顺序由代码页确定。典型的二进制排序顺序如下例所示:

A < B < E < Z < a < b < e < z < _ < _ < _ < _ < _ <

Option Compare Text 根据由系统国别确定的一种不区分大小写的文本排序级别来进行字符串比较。当使用 Option Compare Text 对相同字符排序时,会产生下述文本排序级别:

(A=a) < ( _=_) < (B=b) < (E=e) < (_=_) < (Z=z) < (_=_)

Option Compare Database 只能在 Microsoft Access 中使用。当需要字符串比较时,将根据数据库的国别 ID 确定的排序级别进行比较。

Instr函数

一、题目:

要求编写一段代码,运用Instr函数,在一字符串中查找另一字符串并返回结果。

二、代码:

Sub 示例_1_18()

Dim bssString, yczChar, wz

bssString ="ABpAApCDPBBP"

yczChar = "P"

MsgBox "bssString = "" ABpAApCDPBBP """ & Chr(10) & _

"yczChar= ""P"" 时: " & Chr(10) & Chr(10) & _

"InStr(4, bssString, yczChar, 1) 返回值为 " & _

InStr(4, bssString, yczChar, 1)

wz = Instr(1, bssString, yczChar, 0)

wz = Instr(bssString,yczChar) ' 返回 9。

wz = Instr(1, bssString, "W") ' 返回 0。

End Sub

三、代码详解

1、Sub 示例_1_18():宏程序的开始语句。宏名为示例_1_18。

2、Dim bssString, yczChar, wz :变量bssString、yczChar和ws声明为可变型变量。

3、bssString ="ABpAApCDXPBBP" : 把被搜索的字符串赋给变量bssString。

4、yczChar = "P" : 把要查找的字符P赋给变量yczChar。

5、MsgBox "bssString = "" ABpAApCDPBBP """ & Chr(10) & _

"yczChar= ""P"" 时: " & Chr(10) & Chr(10) & _

"InStr(4, bssString, yczChar, 1) 返回值为 " & _

InStr(4, bssString, yczChar, 1): 用消息框显示从第四个字符开始,以文本比较的方式找字符P,返回值为 6(小写 p的位置)。小写 p 和大写 P 在文本比较下是一样的,也就是当函数的最后一个参数为1时,查找不分大小写。把要查找的字符P的位置赋给变量yczChar。式中Chr(10)是换行符。

6、wz = Instr(1, bssString, yczChar, 0) :从第一个字符开始,以二进制比较的方式查找,返回值为 9(大写 P的位置)。小写 p 和大写 P 在二进制比较下是不一样的,也就是当函数的最后一个参数为0时,查找分大小写。把查找到的字符P的位置赋给变量wz。

7、wz = Instr(bssString, yczChar) :上一句也可写成这样的,因为缺省的比对方式为二进制比较(最后一个参数可省略)。第一个参数省略默认从第一个字符开始查找。返回值为 9。

8、wz = Instr(1,bssString, ”W”) :在被搜索的字符串中查找字符W,由于没找到返回值为0。

InStr 函数

返回 Variant (Long),指定一字符串在另一字符串中最先出现的位置。

InStr([start, ]string1, string2[, compare])

InStr 函数的语法具有下面的参数:

start 可选参数。为数值表达式,设置每次搜索的起点。如果省略,将从第一个字符的位置开始。如果指定了 compare 参数,则一定要有 start 参数。

string1 必要参数。接受搜索的字符串表达式。

string2 必要参数。被搜索的字符串表达式。

Compare可选参数。指定字符串比较。如果省略 compare,Option Compare 的设置将决定比较的类型。

compare 参数设置为:

常数 值 描述

vbUseCompareOption -1 使用Option Compare 语句设置执行一个比较。

vbBinaryCompare 0 执行一个二进制比较。

vbTextCompare 1 执行一个按照原文的比较。

vbDatabaseCompare 2 仅适用于Microsoft Access,执行一个基于数据库中信息的比较。

以上就是关于oracle like 和instr的差别全部的内容,包括:oracle like 和instr的差别、oracle高手进!、vb中instr函数搜索时跳过空格吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/sjk/9426749.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存