FIND_IN_SET函数介绍及array_contains函数

FIND_IN_SET 函数

FIND_IN_SET 函数,可直接用于查询逗号分隔字符串中元素的位置,具体如下:

语法:

FIND_IN_SET(str, strlist)
str:待查找的字符串。
strlist:以逗号分隔的字符串列表。
返回值:
返回 str 在 strlist 中的位置(从 1 开始计数),若未找到则返回 0。

示例:

--1.查找元素位置
SELECT 
  FIND_IN_SET('b', 'a,b,c,d') AS pos1,  -- 返回 2
  FIND_IN_SET('d', 'apple,banana,date') AS pos2;  -- 返回 0(未找到)
  
--2.在 WHERE 子句中过滤数据  

--假设 tags 字段值为 'new,urgent,hot',则匹配该记录。
SELECT order_id, tags
FROM orders
WHERE FIND_IN_SET('urgent', tags) > 0;

--3.与 CASE 语句结合分类
SELECT 
  user_id,
  CASE 
    WHEN FIND_IN_SET('admin', roles) > 0 THEN '高级用户'
    WHEN FIND_IN_SET('editor', roles) > 0 THEN '中级用户'
    ELSE '普通用户'
  END AS permission_level
FROM user_roles;

array_contains函数

array_contains 是用于检查数组中是否包含特定元素的函数。以下是全面解析:

语法:

array_contains(array<T>, value) → boolean
输入:
array<T>:目标数组(支持基本类型、结构体、嵌套数组)
value:待检查的元素(类型需与数组元素一致)
输出:
true:数组包含该元素
false:数组不包含该元素
NULL:任一输入为 NULL(Hive 行为)或元素类型不匹配

示例:


--1.查找元素
SELECT array_contains(split('A,B,C', ','), 'B'); --true

--2.在 WHERE 子句中过滤数据 
--假设 interests 字段值为 ['reading', 'hiking', 'music'],则命中该记录。
SELECT user_id, interests
FROM user_profiles
WHERE array_contains(interests, 'hiking');

--3.与 CASE 语句结合分类
SELECT 
  user_id,
  CASE 
    WHEN array_contains(privileges, 'admin') THEN '管理员'
    WHEN array_contains(privileges, 'editor') THEN '编辑'
    ELSE '普通用户'
  END AS role
FROM users;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值