2015-10-08 2 views
7

私は一部(すべてではない)の値が、私は割合が含まれているすべての値を検索するなど、例えば、パーセンテージが含まれている'12%''97%'。表中のcharacter varyingのエントリを持っています言い換えれば、パーセント記号('%')で終わるすべての値を探したいと思います。どのようにして、LIKEクエリを使用してPostgreSQLでリテラルのパーセント記号(%)を見つけることができますか?

答えて

0

私は正規表現を使用して終了:

select * from my_table where my_column ~ '%$'; 

しかし、私はまだそれがLIKEオペレータ/比較を使用することが可能ですかどうかを知りたいのです。

+1

http://www.postgresql.org/docs/current/static/functions-matching.html#FUNCTIONS-LIKE「*、他の文字に一致せず、それぞれのリテラルアンダースコアまたはパーセント記号に一致するようにパターンの文字の前にエスケープ文字*が付いていなければなりません* " –

5

あなたはこのように試すことができます:あなたは、リテラル%記号をエスケープする必要が

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> 
+0

' standard_conforming_strings'オプションがオフになっていると( 'show standard_conforming_strings;'でチェックできます)、バックスラッシュを二重にする必要があります: 'SELECT * FROM my_table WHERE my_column LIKE '両方の場合( 'standard_conforming_strings'に関係なく)、バックスラッシュを二重にしたエスケープ文字列構文を使用することができます。 ' SELECT * FROM my_table WHERE my_column LIK E E '%\\ %%' ESCAPE E '\\'; ' –

3

。デフォルトでは、エスケープ文字はバックスラッシュです:

SELECT * FROM my_table WHERE my_column LIKE '%\%'; 

この場合、最初の%サインはmy_columnのいずれかの起動シーケンスと一致します。残りの\%は、リテラル%文字として解釈されます。したがって、組み合わせは、%文字で終わるものと一致します。

SQLFiddle

関連する問題