跳到主要内容

ilike:大小写不敏感匹配

速查结论

str ilike pattern [ESCAPE escape] 是 Spark SQL 中用于忽略大小写进行模式匹配的函数(like的大小写不敏感版本)。

语法

str ilike 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 ilike('Spark', '_Park');
true
> SET spark.sql.parser.escapedStringLiterals=true;
spark.sql.parser.escapedStringLiterals true
> SELECT '%SystemDrive%\Users\John' ilike '\%SystemDrive\%\\users%';
true
> SET spark.sql.parser.escapedStringLiterals=false;
spark.sql.parser.escapedStringLiterals false
> SELECT '%SystemDrive%\\USERS\\John' ilike '\%SystemDrive\%\\\\Users%';
true
> SELECT '%SystemDrive%/Users/John' ilike '/%SYSTEMDrive/%//Users%' ESCAPE '/';
true

常见报错与避坑指南

  • ilikelike的区别ilike忽略大小写进行匹配,而like区分大小写。当需要对大小写不敏感的模糊匹配时使用ilike
  • 转义字符仅在特殊符号前有效:如果转义字符不在_%或另一个转义字符之前,该转义被视为无效,可能导致意外匹配或报错。
  • 字符串文字转义行为依赖Spark配置spark.sql.parser.escapedStringLiterals 的设置影响模式中反斜杠的解析方式,Spark 2.0+默认关闭。如需匹配反斜杠,注意根据配置调整模式中的转义层级。

提示:使用 RLIKE 来匹配标准的正则表达式。

Since: 3.3.0

📱关注公众号

「数据仓库技术」文章同步更新,不错过每一篇干货

微信公众号二维码
💬加群交流

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

交流微信二维码

你可能还想看