带有“|”的文本字段的LIKE子句不返回结果

时间:2018-02-12 17:56:52

标签: sql pattern-matching amazon-redshift

当我的|子句中包含WHERE分隔符的字符串时,我遇到了一个非常奇怪的问题。

例如,以下代码返回足够的值:

SELECT DISTINCT name
FROM stats
  WHERE name like 'Display |%'
ORDER BY 1 ASC

Display | New         
Display | Rerunning

但是当我这样做时(注意|之后的空格,并且空格后的字符也是相同的效果),由于某种原因,我得到无结果

SELECT DISTINCT name
    FROM stats
      WHERE name like 'Display | %'
    ORDER BY 1 ASC

也许我应该逃避“|” ?或为什么LIKE子句不起作用?

1 个答案:

答案 0 :(得分:1)

您可以使用等效的regular expression来覆盖所有类型的空白区域:

...
WHERE name ~ '^Display\s+\|\s*'
...

\s+ ..一个或多个空格字符([[:space:]]class-shorthand

\s* .. 0或更多相同的

|必须转义为\|,因为它在正则表达式中具有特殊含义(但不是LIKE模式中的)。

以上链接指向Postgres手册。 The manual page for Redshift.