SQL进阶--8__ hiveSQL如何判断某个字符是否在字符串中

0-需求

过滤出字符串中包含某字符的数据

1-实验

(1)用locate()函数判断【推荐比较高效】

  • 我们知道locate()函数可以判断某个字符在字符串中的位置,如果不在该字符串中返回0值,如果在返回字符对应的索引位置。
select locate('1','10002,21002,11001,11001')
0: jdbc:hive2://10.9.1.212:10000> select locate('1','10002,21002,11001,11001');
+------+--+
| _c0  |
+------+--+
| 1    |
+------+--+
1 row selected (0.093 seconds)
0: jdbc:hive2://10.9.1.212:10000> 

返回值为1说明大于0,表示存在或包含

(2)用like正则匹配【不推荐,效率低】

select '10002,21002,11001,11001' like '%1%';
0: jdbc:hive2://10.9.1.212:10000> select '10002,21002,11001,11001' like '%1%';
+-------+--+
|  _c0  |
+-------+--+
| true  |
+-------+--+
1 row selected (0.118 seconds)
0: jdbc:hive2://10.9.1.212:10000>
select '10002210021100111001' like '%1%';
0: jdbc:hive2://10.9.1.212:10000> select '10002210021100111001' like '%1%';
+-------+--+
|  _c0  |
+-------+--+
| true  |
+-------+--+
1 row selected (0.075 seconds)
0: jdbc:hive2://10.9.1.212:10000> 

返回true值表示包含,存在要找的字符

(3)用regexp正则匹配。注意此时regxp()里面的正则为regexp(’.* 1.*’)

select '10002,21002,11001,11001' regexp('.*1.*');
0: jdbc:hive2://10.9.1.212:10000> select '10002,21002,11001,11001' regexp('.*1.*');
+-------+--+
|  _c0  |
+-------+--+
| true  |
+-------+--+
1 row selected (0.06 seconds)

具体测试case如下:
(1)regxp()测试

select count(1) from ods_phm_sigmach_lightunit_fea where slight_type regexp('.*1.*');

在这里插入图片描述
** (2)like模糊匹配测试**

select count(1) from ods_phm_sigmach_lightunit_fea where slight_type like '%1%';

在这里插入图片描述
(3) locate()函数测试

select count(1) from ods_phm_sigmach_lightunit_fea where locate('1',slight_type) > 0;

在这里插入图片描述
由测试的结果看:locate()>regexp()>like

2-总结

  • 本文讲解了一种利用HQL判断字符串中是否包含某个字符的方法,给出了三种方法,经过测试分析得出使用locate()函数判断效果最高,regexp()函数次之,效率最差的为like模糊匹配,建议慎用。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值