在 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';