跳到主要内容

like:模式匹配

速查结论

str like pattern [ESCAPE escape] 是 Spark SQL 中用于使用通配符模式匹配字符串的函数。

语法

str like pattern [ESCAPE escape]

如果 str 匹配模式 pattern 并且有转义字符,则返回真;如果任何参数是 null,则返回 null;否则返回假。

参数说明

参数类型说明
strSTRING一个字符串表达式
patternSTRING一个字符串表达式。该模式是一个字符串,通常按字面意义匹配,但以下特殊符号例外:_ 匹配输入中的任意一个字符(类似于 posix 正则表达式中的 .);% 匹配输入中的零个或多个字符(类似于 posix 正则表达式中的 .*)。从 Spark 2.0 开始,SQL 解析器不再对字符串文字进行转义。例如,为了匹配 "\abc",模式应该是 "\abc"。当启用 SQL 配置 spark.sql.parser.escapedStringLiterals 时,它将回退到 Spark 1.6 关于字符串文字解析的行为。
escapeCHARSpark 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真题

交流微信二维码

你可能还想看