如何使用LIKE查询在PostgreSQL中找到文字百分号(%)?

mag*_*nus 16 postgresql sql-like

我有character varying一个表,其中的条目的一些(不是全部)值包含百分比,如'12%','97%'等我想找到所有包含百分比值.换句话说,我想找到所有以百分号('%')结尾的值.

Rah*_*thi 15

你可以尝试这样:

SELECT * FROM my_table  WHERE my_column LIKE '%\%%' ESCAPE '\';
Run Code Online (Sandbox Code Playgroud)

格式

 <like predicate> ::=
      <match value> [ NOT ] LIKE <pattern>
        [ ESCAPE <escape character> ]

 <match value> ::= <character value expression>

 <pattern> ::= <character value expression>

 <escape character> ::= <character value expression>
Run Code Online (Sandbox Code Playgroud)

  • 如果你关闭了`standard_conforming_strings`选项(可以通过`show standard_conforming_strings;`检查),你需要双反斜杠:`SELECT * FROM my_table WHERE my_column LIKE '%\\%%' ESCAPE '\\';`在这两种情况下(不管`standard_conforming_strings`)你都可以使用带有双反斜杠的转义字符串语法:`SELECT * FROM my_table WHERE my_column LIKE E'%\\%%' ESCAPE E'\\';` (2认同)

Pat*_*ick 8

你必须逃避文字%符号.默认情况下,转义字符是反斜杠:

SELECT * FROM my_table  WHERE my_column LIKE '%\%';
Run Code Online (Sandbox Code Playgroud)

在这种情况下,第一个%符号匹配任何起始序列my_column.其余的\%被解释为文字%字符.因此,组合是:匹配以%字符结尾的任何内容.

SQLFiddle


mag*_*nus 4

我最终使用了正则表达式:

select * from my_table where my_column ~ '%$';
Run Code Online (Sandbox Code Playgroud)

但是,我仍然想知道是否可以使用LIKE运算符/比较。

  • http://www.postgresql.org/docs/current/static/functions-matching.html#FUNCTIONS-LIKE "*要匹配文字下划线或百分号而不匹配其他字符,模式中的相应字符前面必须带有转义字符*” (5认同)