Hive SQL判断一个字符串中是否包含字串的N种方式及其效率
背景
这是个常见需求,某个表tab中,需要判断某个string类型的字段中,哪些数据含有一个子串。以下给出6种方案,并给出效率对比。
方案1:regexp_extract
可以使用regexp_extract(subject, pattern, index)函数来提取字符串中匹配指定正则表达式的字串。要判断一个字符串中是否包含字串"ABCD;",可以使用如下代码:
SELECT
CASE
WHEN regexp_extract(subject, 'ABCD;', 0) != '' THEN '包含'
ELSE '不包含'
END AS is_contain
FROM
your_table;
其中,subject是要判断的字符串,'ABCD;‘是要匹配的字串,0表示从整个匹配结果中获取整个字串。如果返回的字串不为空,则说明匹配到了,即包含字串’ABCD;’,否则不包含。你需要将your_table替换为你实际使用的表名或子查询。
方案2:instr
使用instr(str, substr)函数来实现,使用类似下面的代码:
SELECT