模式匹配条件(Pattern-matching Conditions)用来比较字符数据。

LIKE 条件

LIKE 条件用于模式匹配。相等运算符(=)指的是一个字符值与另一个字符值完全匹配,而 LIKE 条件通过在第一个值中搜索由第二个字符值指定的模式来将一个字符值的一部分与另一个字符值进行匹配。LIKE 使用输入字符集定义的字符来计算字符串。

语法

  1. char1 [NOT] LIKE char2 [ ESCAPE esc_char ]

除了 LIKE,特殊的模式匹配字符 _ 表示值中的一个字符恰好匹配, 表示值中的零个或多个字符匹配。模式 不能与 NULL 匹配。

参数

参数说明
char1字符表达式,例如字符列,称为搜索值。
char2字符表达式,通常是文字,称为模式。
esc_char

字符表达式,通常是文字,ESCAPE 将 esc_char标识为转义字符。当转义符置于模式匹配符之前时,该模式匹配符被解释为普通的字符。

示例

以下语句使用了 LIKE

  1. SELECT last_name FROM employees WHERE last_name LIKE '%A\_B%' ESCAPE '\' ORDER BY last_name;

ESCAPE '\' 会将 %A\_B%\ 后面的模式匹配符‘_’解释为普通的字符。

  1. SELECT salary FROM employees WHERE 'SM%' LIKE last_name ORDER BY salary;

REGEXP_LIKE 条件

REGEXP_LIKE 用于正则表达式匹配。REGEXP_LIKE 使用输入字符集定义的字符评估字符串。

语法

  1. REGEXP_LIKE(source_char, pattern [, match_param ])

参数

参数说明
source_char用作搜索值的字符表达式,数据类型可以是 CHARVARCHAR2NCHARNVARCHAR2CLOB
pattern正则表达式,数据类型可以是 CHARVARCHAR2NCHARNVARCHAR2CLOB
source_char数据类型 VARCHAR2CHAR 的字符表达式,允许您更改条件的默认匹配行为。

如果模式的数据类型与 source_char 的数据类型不同,OceanBase 将模式转换为 source_char 的数据类型。

示例

创建表 employees,并向里面插入数据。执行以下语句:

  1. CREATE TABLE employees(manager_id INT, first_name varchar(50), last_name varchar(50), hiredate varchar(50),SALARY INT);
  2. INSERT INTO employees VALUES(300, 'Steven', 'King', '2019-09-11',23600);
  3. INSERT INTO employees VALUES(200, 'Steven', 'Markle', '2019-11-05', 23800);
  4. INSERT INTO employees VALUES(100, 'Deven', 'Part', '2018-10-01',24000);
  5. INSERT INTO employees VALUES(200, 'Carlos', 'Ross', '2019-06-11',23500);
  6. INSERT INTO employees VALUES(200, 'Teven', 'Bell', '2019-05-25', 23000);
  7. INSERT INTO employees VALUES(200, 'Stephen', 'Stiles', '2018-06-11',24500);
  8. INSERT INTO employees VALUES(100, 'Ame', 'De Haan', '2018-05-01',11000);
  9. INSERT INTO employees VALUES(100, 'Jon', 'Errazuriz', '2017-07-21', 1400);
  10. COMMIT;

查询返回名字为 StevenStephen 的员工的名字和姓氏(其中 first_nameSte 开头,以 en 结尾,中间是 vph),执行以下语句:

  1. SELECT first_name, last_name FROM employees WHERE REGEXP_LIKE (first_name, '^Ste(v|ph)en$')
  2. ORDER BY first_name, last_name;

查询结果如下:

  1. +------------+-----------+
  2. | FIRST_NAME | LAST_NAME |
  3. +------------+-----------+
  4. | Stephen | Stiles |
  5. | Steven | King |
  6. | Steven | Markle |
  7. +------------+-----------+