Snowflake中如何提取文本字段内'was'与'by'之间的单词
Snowflake提取
was与by之间状态值的实现方法 针对给出的固定格式文本,可通过以下两种方式提取目标关键词,优先推荐正则方案,容错性更高。
方案1:正则匹配提取(推荐)
使用Snowflake内置的REGEXP_SUBSTR函数,通过捕获组直接抓取两个固定关键词中间的内容,不受手机号长度、前后空格数量变化的影响:
SELECT REGEXP_SUBSTR(your_text_column, 'was\\s+(\\w+)\\s+by:', 1, 1, 'e', 1) AS flag_type FROM your_table;
参数说明:
\\s+匹配任意数量的空白字符,兼容文本中意外多打空格的场景- 最后一个参数
1指定返回第一个捕获组的内容,也就是was和by之间的单词,可自动识别flagged/unflagged两种取值 - 如果需要严格匹配大小写,可移除参数中的
'e'配置
方案2:字符串切分提取(格式完全固定场景适用)
如果文本100%严格符合给出的样例格式,没有任何格式波动,可以用字符串拆分的方式实现,性能比正则略高:
SELECT TRIM(SPLIT_PART(SPLIT_PART(your_text_column, 'was', 2), 'by', 1)) AS flag_type FROM your_table;
逻辑说明:
- 第一次以
was为分隔符切分文本,取分隔符后的第二段内容 - 第二次以
by为分隔符切分上一步的结果,取分隔符前的第一段内容 - 最后用
TRIM去除内容前后的多余空格,得到目标值
异常值兜底校验
由于目标值只有flagged/unflagged两种,可以加一层校验逻辑,标记异常格式的数据:
SELECT CASE WHEN flag_type IN ('flagged', 'unflagged') THEN flag_type ELSE NULL -- 异常值可按需替换为自定义标记,比如'invalid_format' END AS checked_flag_type FROM ( SELECT REGEXP_SUBSTR(your_text_column, 'was\\s+(\\w+)\\s+by:', 1, 1, 'e', 1) AS flag_type FROM your_table ) t;
内容的提问来源于stack exchange,提问作者reachbgk
相关产品推荐
相关产品推荐

