Databricks中CASE表达式匹配邮箱特殊字符异常问题求助
问题原因
你写的CASE表达式里,LIKE '%_%'中的下划线_是SQL的通配符,作用是匹配任意单个字符,所以只要邮箱地址里有至少一个字符(所有合法邮箱都满足),第一个条件就会成立,直接返回2,第二个判断带点的条件根本不会执行,这就是两个邮箱都返回2的原因。
解决方案
要把下划线当作普通字符匹配,需要对它进行转义。Databricks SQL默认用反斜杠\作为转义字符,调整后的CASE表达式如下:
case when b.useremailaddress like '%.%' then 1 -- 先判断点分隔的情况,确保符合预期优先级 when b.useremailaddress like '%\_%' then 2 -- 转义下划线,匹配包含下划线的邮箱 else 0 end as special_char
如果反斜杠转义不生效,也可以用ESCAPE关键字指定自定义转义符,比如用#:
case when b.useremailaddress like '%.%' then 1 when b.useremailaddress like '%#_%' escape '#' then 2 else 0 end as special_char
注意:这里调换了两个条件的顺序,因为如果某个邮箱同时包含点和下划线,CASE会返回第一个匹配的结果。如果你的需求是只要包含下划线就返回2(不管有没有点),再把条件顺序换回去即可。
内容的提问来源于stack exchange,提问作者Desert Spider
相关产品推荐
相关产品推荐

