Oracle REGEXP_LIKE模糊查询用法例子

作者:頑張ろう! 时间:2023-07-19 08:26:22 

1、函数介绍

REGEXP_LIKE 函数在功能上与 LIKE 函数非常相似。 然而,虽然 LIKE 允许简单的字符串匹配搜索,但 REGEXP_LIKE 函数非常强大,因为除了字符串匹配搜索之外,它还可以使用正则表达式。 REGEXP_LIKE 可以按如下方式使用。

        REGEXP_LIKE ( string , pattern [, match] )

        REGEXP_LIKE ( 检索对象 , 检索字符 [, 检索参数] )

                      ' 'i':不区分大小写

                      'c':区分大小写

                      'n':将换行符与“n”句点 (.) 匹配

                      'm':将搜索目标视为多行,并将“^”和“$”匹配到每行的开头和结尾。

进行测试之前先创建表

CREATE TABLE test_table_regexp_like
(
 message_val VARCHAR2(50) NOT NULL
);

INSERT INTO test_table_regexp_like VALUES ('Data Discrepancy needs to be fixed.');
INSERT INTO test_table_regexp_like VALUES ('I am in desperate NEED of money.');
INSERT INTO test_table_regexp_like VALUES ('I really NeeD you forever.');

2、使用此函数不区分大小写

2-1、LIKE 函数

SELECT
   message_val AS message_val_like
FROM
   test_table_regexp_like
WHERE
   LOWER(message_val) LIKE '%need%';

查询结果:

message_val
--------------------------------------------------
Data Discrepancy needs to be fixed.
I am in desperate NEED of money.
I really NeeD you forever.

2-2、REGEXP_LIKE 函数

SELECT
   message_val AS message_val_regexp_like
FROM
   test_table_regexp_like
WHERE
   REGEXP_LIKE(message_val, 'need', 'i');

查询结果

message_val_regexp_like
--------------------------------------------------
DATA Discrepancy needs TO be fixed.
I am IN desperate NEED OF money.
I really NeeD you forever.

3、多条件

3-1、多个OR条件时,LIKE函数就不能满足需求了。

-- 包含 am 或者 NeeD 的数据

-- ”|“ 作用 = or
SELECT
   message_val AS message_val_regexp_like
FROM
   test_table_regexp_like
WHERE
   REGEXP_LIKE(message_val, 'am|NeeD');    

查询结果

message_val_regexp_like
--------------------------------------------------
I am IN desperate NEED OF money.
I really NeeD you forever.

3-2、AND :既有A又有B

-- AND 条件 ("really" 和 "you" 都包含的)
-- "()|()" = AND
SELECT
   message_val AS message_val_regexp_like
FROM
   test_table_regexp_like
WHERE
   REGEXP_LIKE(message_val, '(really)|(you)');

检索结果

message_val_regexp_like
--------------------------------------------------
I really NeeD you forever.

3-3、检索以某个字符串开头的数据

-- 以 "I" 开头,中间有 "you" 的字符串。
-- "^" 字符串首位
-- ".*" 任意字符串
SELECT
   message_val AS message_val_regexp_like
FROM
   test_table_regexp_like
WHERE
   REGEXP_LIKE(message_val, '^I.*you.*');

检索结果

message_val_regexp_like
--------------------------------------------------
I really NeeD you forever.

3-4、检索以某个字符串结尾的数据

-- 以 "I" 开头、以 "money." 结尾的字符串
-- "^" :字符串首位
-- "$" :字符串末尾
SELECT
   message_val AS message_val_regexp_like
FROM
   test_table_regexp_like
WHERE
   REGEXP_LIKE(message_val, '^I.*money.$');

检索结果

message_val_regexp_like
--------------------------------------------------
I am IN desperate NEED OF money.

补充:oracle模糊查询中的regexp_like嵌套子查询用法

oracle模糊查询中的regexp_like嵌套子查询用法

regexp_like一般用于模糊查询某一列时包含多个查询条件

需求1:在用户表中查询出账号包含650000和230000的用户。

select * from sys_user where regexp_like(account,'650000|230000')

以上的写法等同于下面的写法:

select * from sys_user where account like '%650000%' or account like'%230000%'

需求2:在另一张表中查询出所需条件(查询条件为另一个表的结果集),并在用户表中以该条件模糊查询对应的用户信息。

即在sys_org表中查出类型为1的orgid并以此结果在sys_user表中查询出对应的账号信息。

select fullname,account from sys_user where  REGEXP_LIKE (account,(select replace(wm_concat(orgid),',','|') from (select orgid from  sys_org where orgtype = '1' order by orgid )))

解决思路:

若是以此结果集进行查询会报错:“单行子查询返回多行”

1、将结果集显示成一列。所用函数:wm_concat(列名)

注:wm_concat(列名),该函数可以把列值以","号分隔起来,并显示成一行,即“行转列”

select wm_concat(orgid) from (select orgid from  sys_org where orgtype = '1' order by orgid )

Oracle REGEXP_LIKE模糊查询用法例子

2、将结果集用 | 分隔

select replace(wm_concat(orgid),',','|') from (select orgid from  sys_org where orgtype = '1' order by orgid )

Oracle REGEXP_LIKE模糊查询用法例子

3、查询条件并已完成,用 regexp_like查询出所需信息即可

select fullname,account from sys_user where  REGEXP_LIKE (account,(select replace(wm_concat(orgid),',','|') from (select orgid from  sys_org where orgtype = '1' order by orgid )))

来源:https://blog.csdn.net/m0_37823115/article/details/124965854

标签:oracle,regexp,like,模糊查询
0
投稿

猜你喜欢

  • python GUI编程实现扫雷游戏

    2023-10-27 20:41:29
  • MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法

    2024-01-15 17:25:21
  • python os.path模块使用方法介绍

    2023-08-03 18:02:32
  • 如何解决ORA-01843与NLS_DATE_FORMAT问题

    2023-06-30 20:57:14
  • axios拦截器工作方式及原理源码解析

    2023-07-02 16:38:36
  • Python批量修改文件名的方式详解

    2023-05-15 20:56:08
  • 在数据库‘master’中拒绝CREATE DATABASE权限问题的解决方法

    2011-10-24 19:46:55
  • Python分支结构(switch)操作简介

    2021-07-05 07:24:46
  • php中$_GET与$_POST过滤sql注入的方法

    2023-07-13 14:38:12
  • SQL联合查询inner join、outer join和cross join的区别详解

    2024-01-14 21:33:41
  • Pygame代码 制作一个贪吃蛇小游戏

    2022-06-29 03:04:27
  • python如何实现不可变字典inmutabledict

    2023-11-20 11:09:46
  • Python人工智能之波士顿房价数据分析

    2021-09-23 19:43:35
  • 使用SQL Server时最容易忽略的21个问题

    2009-01-13 13:59:00
  • Python的Django框架中自定义模版标签的示例

    2022-10-31 22:28:56
  • python 函数定位参数+关键字参数+inspect模块

    2023-07-05 23:04:37
  • Python json模块与jsonpath模块区别详解

    2023-09-17 18:07:26
  • Go结合反射将结构体转换成Excel的过程详解

    2024-05-05 09:26:49
  • python 为什么说eval要慎用

    2022-05-01 17:38:49
  • 安装sql server 2008 management提示已安装 SQL Server 2005 Express的解决方法

    2024-01-15 12:49:03
  • asp之家 网络编程 m.aspxhome.com