如何在Impala SQL中匹配\%

时间:2018-07-25 02:54:49

标签: sql impala

Impala版本:5.12.2

我需要匹配包含\%的字符串,例如a \%b。在impala shell中,我使用以下sql进行测试:

  1. 选择“ a \\%b”之类的“ a \\\%b”; 结果是正确的: sql result
  2. 选择“ \\%”,例如“ \\\%”; 我期望结果是正确的,但实际上我是错误的: sql result

我认为\和%都应该转义,所以我使用'\\\%'。我不知道第二个SQL为什么不起作用,有人可以解释吗?

顺便说一句,如果我需要匹配包含两个斜杠的字符串,例如a \ b \ c,我尝试了下面的sql:

选择“ a \\ b \\ c”,例如“%\\%\\%”;

,但结果为假: sql result

在这里,%用作通配符,因此我不会对其进行转义。谁能给一个正确的SQL?

谢谢您的建议。

1 个答案:

答案 0 :(得分:0)

您列出的第一个结果与查询不匹配,应该为True。您的第二个查询是错误的,您需要避免出现这种\\\\

此查询应完成工作

select 'a\\b\\c' like '%\\\\%\\\\%';

无论如何,我建议您使用正则表达式

select regexp_like('a\\b\\c','(.*?)\\\\{1}(.*?)\\\\{1}(.*?)'); -- true
select regexp_like('a\\bc','(.*?)\\\\{1}(.*?)\\\\{1}(.*?)'); -- false
select regexp_like('a\\\\','(.*?)\\\\{1}(.*?)\\\\{1}(.*?)'); -- true
select regexp_like('\\\\','(.*?)\\\\{1}(.*?)\\\\{1}(.*?)'); -- true
select regexp_like('\\b\\c','(.*?)\\\\{1}(.*?)\\\\{1}(.*?)'); -- true
select regexp_like('ab\\','(.*?)\\\\{1}(.*?)\\\\{1}(.*?)'); -- false