Snowflake:如何基于多值字段的条件判断生成状态列
在Snowflake中实现按分隔code字段生成status列的方法
针对你的需求,这里提供两种在Snowflake中创建cust_status表的实现方式:
方法一:使用拆分表函数+存在性检查
这种方式逻辑直观,适合需要明确拆分并验证每个code值的场景:
CREATE TABLE cust_status AS SELECT id, code, CASE WHEN EXISTS ( SELECT 1 FROM TABLE(SPLIT_TO_TABLE(c.code, ';')) s WHERE s.value IN ('101', '102', '103', '104') ) THEN 1 ELSE 0 END AS status FROM customer c;
逻辑说明
SPLIT_TO_TABLE(c.code, ';')将code字段按分号拆分成多行子表,每行对应一个独立的code值- 子查询通过
EXISTS判断是否有拆分出的code值属于目标集合('101','102','103','104') - 满足条件则
status设为1,否则设为0
方法二:使用正则表达式匹配
这种方式更简洁,适合熟悉正则表达式的场景,避免子查询操作:
CREATE TABLE cust_status AS SELECT id, code, CASE WHEN REGEXP_LIKE(code, '(^|;)10[1-4](;|$)') THEN 1 ELSE 0 END AS status FROM customer;
逻辑说明
- 正则表达式
(^|;)10[1-4](;|$)用于精准匹配完整的目标code值:(^|;)表示匹配行首或分号(确保是code值的起始位置)10[1-4]匹配101、102、103、104(;|$)表示匹配分号或行尾(确保是code值的结束位置)
- 匹配成功则
status设为1,否则设为0
两种方法均可生成符合预期的cust_status表,可根据个人习惯和实际数据特点选择。
内容的提问来源于stack exchange,提问作者Hari
相关产品推荐
相关产品推荐

