在 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 分钟前
ORA-12518:Oracle 监听程序无法分发客户端连接原因及解决方法
数据库·oracle
Elastic 中国社区官方博客12 分钟前
组合 OpenTelemetry 参考架构
大数据·数据库·elasticsearch·搜索引擎·架构
Z_Wonderful15 分钟前
在 **Next.js** 中使用 `mysql2` 连接 MySQL 数据库并查询 `xxx` 表的数据
android·数据库
妖萌妹儿16 分钟前
postman怎么做参数化批量测试,测试不同输入组合
开发语言·javascript·postman
阿琳a_18 分钟前
在github上部署个人的vitepress文档网站
前端·vue.js·github·网站搭建·cesium
酉鬼女又兒18 分钟前
零基础快速入门前端ES6 核心特性详解与蓝桥杯 Web 考点实践(可用于备赛蓝桥杯Web应用开发)
开发语言·前端·职场和发展·蓝桥杯·es6·css3·html5
FirstFrost --sy24 分钟前
MySql 内外连接
android·数据库·mysql
Zk.Sun31 分钟前
【RK3588 Mali610 适配 Qt6 】
前端·javascript·vue.js
watersink31 分钟前
第16章 案例特训专题【数据库篇】
数据库
爬山算法31 分钟前
MongoDB(78)什么是MongoDB的事务?
数据库·mongodb