在 hiveSQL 中判断一个字段是否包含某个值

在 hiveSQL 中判断一个字段是否包含某个值是在写sql时经常遇到的问题,本文将通过下述案例用五种方法进行解决

数据准备:

题目:查找姓名中含有”i“的员工信息

CREATE TABLE employee (
    name STRING,
    age INT
);

INSERT INTO employee VALUES
    ('Alice', 25),
    ('Bob', 30),
    ('Charlie', 35),
    ('David', 40);

方案一:like

select * from employee where name like "%i%";

方案二:rlike 

如果需要使用正则表达式来匹配复杂的模式,可以使用rlike

select * from employee where name rlike ".*i.*";

 

方案三:locate(字符串,字段名)

  • locate返回某个字符串在某个字段中第一次出现的位置,如果要是没有找到,返回0
  • 可以用返回值是否为0来判断一个字段是否包含某个值
select locate('i',name) from employee;
select * from employee where locate('i',name) != 0;

 

方案四:instr(字段名,字符串) 

  • 返回某个字符串在某个字段中第一次出现的位置,如果要是没有找到,返回0
  • 和 locate的区别是先写列名再写要查找的字符串
select instr(name,'i') from employee;
select * from employee where instr(name,'i') != 0;

 

 方案五:regexp_extract

可以使用regexp_extract(subject, pattern, index)函数来提取字符串中匹配指定正则表达式的字串。要判断一个字符串中是否包含字串"ABCD",可以使用如下代码

subject是要判断的字符串,pattern;是要匹配的字串,index表示从整个匹配结果中获取整个字串。如果返回的字串不为空,则说明匹配到了,即包含字串'pattern’,否则不包含。你需要将your_table替换为你实际使用的表名或子查询

select *,regexp_extract(name,'i',0) from employee where regexp_extract(name,'i',0) = 'i';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值