引言
实际工作中,我们难免会遇到数据库中一个字段保存的数据用符号分开,但是获取数据时又只需要查询其中满足条件的一部分,比如:库表中保存人员细类的值为:0401,0402,0513,但我们仅需要查询人员细类有0401的数据。通常情况,我们可能首先想到的就是使用like函数,使用它无疑能获取我们想要的数据,同样也还有其他的方法能获取满足条件的数据。
一 在Oracle中的判断包含指定字符的方法
Oracle判断是否包含指定字符的方法一共三种,分别为:
(1)LIKE函数
(2)INSTR函数
(3)CONTAINS函数
1.1 使用LIKE函数做判断
利用LIKE模糊查询建议在数据量比较小时使用,因为,数据库查询数据时,数据库放弃使用索引查询,选择使用顺序扫描的方式查询数据,进行导致查询效率下降。同样也可以使用REGEXP_LIKE函数进行判断。用法如下:
SELECT T.* FROM RYJBXX T WHERE T.RYXL LIKE '%0401%'
SELECT T.* FROM RYJBXX T WHERE REGEXP_LIKE(T.RYXL,'*0401*')
1.2 使用INSTR函数做判断
同样也可以使用REGEXP_INSTR函数进行判断。用法如下:
SELECT T.* FROM RYJBXX T WHERE INSTR(T.RYXL,'0401') > 0
SELECT T.* FROM RYJBXX T WHERE REGEXP_INSTR(T.RYXL,'*0401*') > 0
3 使用CONTAINS函数做判断
利用CONTAINS函数进行判断时,要求该列使用创建了索引,否则会报错。用法如下:
SELECT T.* FROM RYJBXX T WHERE CONTAINS(T.RYXL,'0401')
在需要使用CONTAINS的列上创建索引时,
需要将INDEXTYPE设置为CTXSYS.CONTEXT
。如果创建了索引但未指定INDEXTYPE,会提示错误:ORA-20000 Oracle Text error DRG-10599: 列没有编制索引。如下:
CREATE INDEX IDX_RYJBXX_RYXL ON RYJBXX(RYXL) INDEXTYPE CTXSYS.CONTEXT
二 在MySQL中的判断包含指定字符的方法
MySQL判断是否包含指定字符的方法一共三种,分别为:
(1)LIKE函数,使用方法与Oracle相同,下文不做介绍
(2)FIND_IN_SET函数
(3)LOCATE函数
2.1 使用FIND_IN_SET函数做判断
函数FIND_IN_SET(str,strlist)的含义为查询字段strlist包含字符串str的数据,其中,str表示被查询的字符串,strlist表示字段名(保存的值必须以”,”分割开),否则不能查询到数据,用法如下:
SELECT T.* FROM USER T WHERE FIND_IN_SET('03',T.TYPE)
2.2 使用LOCATE函数做判断
函数LOCATE(str,field)的含义为查询字段field中包含字符串str的数据(默认的参数为LOCATE(substr,str),为了方便说明,故将其替换为LOCATE(str,field)),其中,str表示被查询的字符串,field表示字段名,用法如下:
SELECT T.* FROM USER T WHERE LOCATE('01',T.TYPE)
三 最后
本文主要介绍Oracle和MySQL数据库中某个字段包含指定字符串的方法,并未对相关函数的详细用法做介绍,多多包涵!希望对读者有帮助!