like:模式匹配
速查结论
str like pattern [ESCAPE escape] 是 Spark SQL 中用于使用通配符模式匹配字符串的函数。
语法
str like pattern [ESCAPE escape]
如果 str 匹配模式 pattern 并且有转义字符,则返回真;如果任何参数是 null,则返回 null;否则返回假。
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| str | STRING | 一个字符串表达式 |
| pattern | STRING | 一个字符串表达式。该模式是一个字符串,通常按字面意义匹配,但以下特殊符号例外:_ 匹配输入中的任意一个字符(类似于 posix 正则表达式中的 .);% 匹配输入中的零个或多个字符(类似于 posix 正则表达式中的 .*)。从 Spark 2.0 开始,SQL 解析器不再对字符串文字进行转义。例如,为了匹配 "\abc",模式应该是 "\abc"。当启用 SQL 配置 spark.sql.parser.escapedStringLiterals 时,它将回退到 Spark 1.6 关于字符串文字解析的行为。 |
| escape | CHAR | Spark 3.0 之后添加的一个字符。默认的转义字符是 \。如果转义字符在特殊符号或另一个转义字符之前,后续字符将被逐字匹配。转义任何其他字符都是无效的。 |
示例
> SELECT like('Spark', '_park');
true
> SET spark.sql.parser.escapedStringLiterals=true;
spark.sql.parser.escapedStringLiterals true
> SELECT '%SystemDrive%\Users\John' like '\%SystemDrive\%\\Users%';
true
> SET spark.sql.parser.escapedStringLiterals=false;
spark.sql.parser.escapedStringLiterals false
> SELECT '%SystemDrive%\\Users\\John' like '\%SystemDrive\%\\\\Users%';
true
> SELECT '%SystemDrive%/Users/John' like '/%SystemDrive/%//Users%' ESCAPE '/';
true
常见报错与避坑指南
- 区分大小写:
like是大小写敏感的匹配。若需要忽略大小写,请使用ilike。 - 转义字符仅在特殊符号前有效:如果转义字符不在
_、%或另一个转义字符之前,该转义被视为无效,可能导致意外匹配或报错。 - 字符串文字转义行为依赖Spark配置:
spark.sql.parser.escapedStringLiterals的设置影响模式中反斜杠的解析方式,Spark 2.0+默认关闭。如需匹配反斜杠,注意根据配置调整模式中的转义层级。
提示:使用 RLIKE 来匹配标准的正则表达式。
Since: 1.0.0
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

💬加群交流
备注「数据仓库技术」加入社群,每日一道大厂SQL真题
