我有一个表中包含 character varying
类型的条目,一些(不是全部)值包含百分比,例如:'12%'
,'97%'
等等。我想找到所有包含百分比的值。换句话说,我想要找到所有以百分号结尾 ('%'
) 的值。
我有一个表中包含 character varying
类型的条目,一些(不是全部)值包含百分比,例如:'12%'
,'97%'
等等。我想找到所有包含百分比的值。换句话说,我想要找到所有以百分号结尾 ('%'
) 的值。
SELECT * FROM my_table WHERE my_column LIKE '%\%%' ESCAPE '\';
格式
<like predicate> ::=
<match value> [ NOT ] LIKE <pattern>
[ ESCAPE <escape character> ]
<match value> ::= <character value expression>
<pattern> ::= <character value expression>
<escape character> ::= <character value expression>
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'\\';
- Vsevolod KulagaESCAPE '\'
子句的目的是什么?没有它查询也可以正常工作。 - Shiva你必须转义百分号。默认情况下,转义字符是反斜杠:
SELECT * FROM my_table WHERE my_column LIKE '%\%';
在这种情况下,第一个 %
符号匹配 my_column
中的任何起始序列。其余的 \%
被解释为文字 % 字符。因此,它们的组合是:匹配以 % 字符结尾的任何内容。
SQLFiddle我最终使用了正则表达式:
select * from my_table where my_column ~ '%$';
不过,我仍然想知道是否可以使用LIKE
运算符/比较。
LIKE
函数提供文档,但@magnus正在提供一种使用正则表达式匹配的解决方法,即~运算符;匹配(正则表达式)区分大小写,又称regexp_like...百分号在正则表达式模式中有特殊含义吗?我认为没有;所以不需要转义它,对吧?这就是@magnus这样做的原因;为了避免转义%,这很聪明。 - Nate Anderson