【数据库笔记】Hive中rlike, like, not like, regexp区别与使用详解

本文详细讲解了Hive中like, rlike, notlike和regexp的区别,包括语法、操作类型、使用场景及实战案例,重点强调了rlike支持正则表达式的强大功能和它们在匹配规则上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:Hive中rlike,like,not like,regexp区别与使用详解

1 like的使用详解

1.1 语法规则

  1. 格式是A like B,其中A是字符串,B是表达式,表示能否用B去完全匹配A的内容,换句话说能否用B这个表达式去表示A的全部内容,注意这个和rlike是有区别的。返回的结果是True/False.
  2. B只能使用简单匹配符号 _%,”_”表示任意单个字符,字符”%”表示任意数量的字符
  3. like的匹配是按字符逐一匹配的,使用B从A的第一个字符开始匹配,所以即使有一个字符不同都不行。
hive (default)> select  'abcde'  like 'abc';
false

hive (default)> select  null   like '%';
NULL

hive (default)> select  'abc'   like null ;
NULL

1.2 操作类型: strings

1.3 使用描述

如果字符串A或者字符串B为NULL,则返回NULL;如果字符串A符合表达式B 的正则语法,则为TRUE;否则为FALSE。尤其注意NULL值的匹配,返回的结果不是FALSE和TRUE,而是null,其实除了is null ,is not null,其他的关系运算符只要碰到null值出现,结果都是返回NULL,而不是TRUE/FALSE。

1.4 案例演示

'foobar' LIKE 'foo'的值为FALSE,而'foobar' LIKE 'foo___'的值为TRUE'foobar' LIKE 'foo%'的值为TRUE

要转义%,请使用(\%匹配一个%字符)。如果数据包含分号,你想匹配它,则需要转义,像'a\;b'

hive (default)> select  'abcde'  like 'abc';
false

hive (default)> select  'abcde'  like 'abc__';
true

hive (default)> select  'abcde'  like 'abc%';
true

hive (default)> select  'abcde'  like '%abc%';
true

hive (default)> select  'abcde'  like 'bc%';
false

hive (default)> select  'abcde'  like '_bc%';
true

hive (default)> select  'abcde'  like '_b%';
true

1.5 注意事项

否定比较时候用NOT A LIKE B(使用A NOT LIIKE B也可以),结果与like的结果时相对的。当然前提要排除出现null问题,null值这个奇葩除外。

hive (default)> select  'abcde'  like 'abc';
false

hive (default)> select  not   'abcde'  like 'abc';
true

hive (default)> select    'abcde' not   like 'abc';
true

hive (default)> select null like '%';
NULL

hive (default)> select not  null like '%';
NULL

hive (default)> select   null not  like '%';
NULL

2 RLIKE比较符使用详解

2.1 语法规则

  1. A RLIKE B ,表示B是否在A里面即可。而A LIKE B,则表示B是否是A.
  2. B中的表达式可以使用JAVA中全部正则表达式,具体正则规则参考java,或者其他标准正则语法。

2.2 操作类型: strings

2.3 使用描述

如果字符串A或者字符串B为NULL,则返回NULL;如果字符串A符合JAVA正则表达式B的正则语法,则为TRUE;否则为FALSE

hive (default)> select 'footbar' rlike '^f..]+r$';
false

hive (default)> select 'footbar' rlike '^f.*r$';
true

hive (default)> select 'foobar' rlike 'foo';  --注意同样表达式,用正则匹配成功
true

hive (default)> select 'foobar' like 'foo';--注意同样表达式,用like匹配失败
false

hive (default)> select '123456' rlike '^\\d+$';
true

hive (default)> select null rlike '.*';
NULL

3 NOT A LIKE B 与 A not like B

  1. not..like是like的否定用法 ,如果like匹配结果时true,则not..like的匹配结果时false,反之也是结果也是相对。当然前提要排除出现null问题,null值这个奇葩除外,null的结果都是null
hive> select 1 from t_fin_demo  where NOT 'football' like 'fff%';
1

hive>select 1 from t_fin_demo where 'football' not  like 'fff%';
1

hive> select 1 from t_fin_demo where 'football'  like 'fff%';

4 关于like与rlike,not like,like not的使用对比总结

  1. Rlike功能和like功能大致一样,like是后面只支持简单表达式匹配(_%),而rlike则支持标准正则表达式语法。所以如果正则表达式使用熟练的话,建议使用rlike,功能更加强大。 所有的like匹配都可以被替换成rlike。反之,则不行。但是注意like是从头逐一字符匹配的,是全部匹配,但是rlike则不是,可以从任意部位匹配,而且不是全部匹配
hive (default)> select 'foobar' like 'foo';
false

hive (default)> select 'foobar' like 'foo';
false

hive (default)> select 'foobar' like 'oo%';
false

hive (default)> select 'foobar' rlike 'foo';
true

hive (default)> select 'foobar' rlike '.oo.*';
true
  1. NOT A LIKE BLIKE的结果否定,如果like匹配结果时true,则not..like的匹配结果时false,反之也是结果也是相对。实际中也可以使用 A NOT LIKE B,也是LIKE的否定,与 NOT A LIKE B一样。当然前提要排除出现null问题,null值这个奇葩除外,null的结果都是null值。
  2. 同理NOT RLIKE 的使用,也是NOT A RLIKE B是对RLIKE的否定。当然前提要排除出现null问题,null值这个奇葩除外,null的结果都是null值。

5 regexp的用法和rlike一样

在这里插入图片描述

### HiveSQL 中 RLIKELIKE区别HiveSQL 中,`RLIKE` 和 `LIKE` 是两种用于模式匹配的运算符。它们的主要功能都是用来判断字符串是否符合某种特定的模式,但在具体实现上存在显著差异。 #### 1. **LIKE 运算符** `LIKE` 主要用于简单的模式匹配操作,支持固定的通配符来定义匹配规则[^4]: - `_` 表示单个任意字符。 - `%` 表示零个或多个任意字符。 - `[charlist]` 表示字符列表中的任何一个单一字符。 - `[!charlist]` 或 `[^charlist]` 表示不在指定字符列表中的任何单一字符。 ##### 示例 假设有一张表 `employees`,其中包含字段 `name`,我们可以通过以下方式使用 `LIKE`: ```sql SELECT name FROM employees WHERE name LIKE 'J%'; -- 查询名字以 J 开头的所有员工 ``` ```sql SELECT name FROM employees WHERE name LIKE '_n%'; -- 查询第二个字母为 n 的所有员工名称 ``` --- #### 2. **RLIKE 运算符** `RLIKE` 支持更复杂的正则表达式来进行模式匹配。它允许用户通过标准的正则表达式语法定义更加灵活的匹配条件。这使得 `RLIKE` 成为了处理复杂字符串需求的强大工具。 ##### 正则表达式的常见元字符包括但不限于: - `.` 匹配任意单个字符。 - `*` 匹配前面的子表达式零次或多次。 - `+` 匹配前面的子表达式一次或多次。 - `{m,n}` 匹配前一项至少 m 次但不超过 n 次。 - `[]` 定义一个字符集合。 - `()` 定义分组。 - `|` 表示逻辑 OR。 ##### 示例 同样基于上述 `employees` 表格,我们可以这样使用 `RLIKE`: ```sql SELECT name FROM employees WHERE name RLIKE '^Jo.*'; -- 查询名字以 Jo 开头的所有员工 ``` ```sql SELECT name FROM employees WHERE name RLIKE '[0-9]'; -- 查询名字中含有数字的所有员工 ``` --- #### 3. **主要区别总结** | 特性 | `LIKE` | `RLIKE` | |---------------------|------------------------------------------|----------------------------------------| | **适用场景** | 简单的固定模式匹配 | 复杂的动态模式匹配 | | **支持的语法** | 固定通配符 (`_`, `%`) | 标准正则表达式 | | **灵活性** | 较低 | 高 | | **性能影响** | 性能较好 | 可能因正则表达式的复杂度而降低 | --- ### 结论 如果仅需执行简单模式匹配,则推荐使用 `LIKE`;而对于涉及更多高级匹配需求的情况(如查找含有特殊字符、满足某些规律的字符串),应优先考虑 `RLIKE`。 ```sql -- 使用 LIKE 查找以 A 开头的名字 SELECT * FROM table_name WHERE column_name LIKE 'A%'; -- 使用 RLIKE 查找含数字的名字 SELECT * FROM table_name WHERE column_name RLIKE '[0-9]'; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值