Redshift中如何使用LIKE操作符匹配反斜杠字符
Redshift LIKE匹配反斜杠的正确解决方法
核心问题是Redshift存在两层转义规则叠加:
- SQL字符串字面量本身就用
\作为转义字符,写在单引号里的\会先被解析器转义一次 - LIKE操作符默认也把
\作为模式转义字符,解析后的字符串进入LIKE匹配时还会被再转义一次
方案1:用默认转义规则匹配
要匹配单个\需要写4个反斜杠:
-- 匹配字符串中包含反斜杠的场景,返回true select 'a\a' like '%\\\\%'; -- 精确匹配内容仅为单个反斜杠的场景 select '\' like '\\\\';
转义逻辑:
- 字符串字面量层:
\\\\先被转义为\\ - LIKE匹配层:
\\再被转义为普通单个\参与匹配
方案2:自定义ESCAPE字符(更推荐,不易出错)
自定义转义字符可以避免多层转义混淆,逻辑更清晰:
-- 返回true select 'a\a' like '%^\%' escape '^';
这里我们把^设为转义字符,模式里的\不需要额外处理,直接按预期匹配即可。
之前写法报错/结果不符合预期的原因
like '\':字符串里单个\转义了后面的单引号,导致引号不闭合,触发语法错误like '\\':字符串层转义后变成\,进入LIKE层后被识别为转义前缀,没有实际匹配的字符,所以匹配a\a返回false- 剩余的写法都存在单引号被
\转义、字符串未闭合的问题,所以全报语法错误
内容的提问来源于stack exchange,提问作者s_earlgrey
相关产品推荐
相关产品推荐

