Athena/Presto中LIKE运算符转义下划线无返回结果如何解决
Athena/Presto LIKE运算符下划线转义解决方案
你当前使用的写法未返回结果,核心原因是Presto/Athena存在两层转义逻辑:SQL字符串字面量转义、LIKE pattern通配符转义,反斜杠作为默认转义符很容易出现多层转义冲突,尤其当你使用的SQL提交客户端额外做了转义处理时,会导致转义失效。
以下是三种可行的实现方案:
- 方案1:使用
ESCAPE子句显式指定转义符(兼容性最好,无转义冲突)
直接指定一个不会出现在匹配规则中的字符作为转义符,避开反斜杠的转义歧义,示例语句:
上述语句指定WHERE value LIKE '%aa#_%' ESCAPE '#'#为转义符,其后跟随的_会被识别为普通字面量字符,而非匹配任意单个字符的通配符。 - 方案2:使用字符串匹配函数跳过通配符逻辑(实现最简单)
如果你只需要判断固定子串是否存在,不需要用到LIKE的通配符能力,可以直接用STRPOS函数实现,完全不需要处理转义:
该函数会直接返回子串WHERE STRPOS(value, 'aa_') > 0aa_在value字段中的位置,返回值大于0即表示包含对应子串,逻辑更直观不易出错。 - 方案3:使用默认反斜杠转义(需适配客户端规则)
如果你坚持使用默认的反斜杠作为转义符,需要根据你使用的SQL提交工具调整反斜杠数量:- 直接在Athena控制台执行SQL:两层转义需要写2个反斜杠,语句为
WHERE value LIKE '%aa\\_%' - 通过JDBC/ODBC客户端、代码脚本提交SQL:额外多一层转义需要写4个反斜杠,语句为
WHERE value LIKE '%aa\\\\_%'
- 直接在Athena控制台执行SQL:两层转义需要写2个反斜杠,语句为
内容的提问来源于stack exchange,提问作者ericbrownaustin
相关产品推荐
相关产品推荐

