Oracle和Mysql判断是否包含指定字符的方法

  • Post author:
  • Post category:mysql


引言

实际工作中,我们难免会遇到数据库中一个字段保存的数据用符号分开,但是获取数据时又只需要查询其中满足条件的一部分,比如:库表中保存人员细类的值为: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数据库中某个字段包含指定字符串的方法,并未对相关函数的详细用法做介绍,多多包涵!希望对读者有帮助!



版权声明:本文为qq_37134175原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。