_文字と%文字は、LIKEステートメントで文字通り一致するように引用符で囲む必要があり、それを回避する方法はありません。選択は、クライアント側またはサーバー側で行うことです(通常、SQL replace()を使用します。以下を参照してください)。また、一般的なケースで100%正しくするために、考慮すべきことがいくつかあります。
デフォルトでは、_または%の前に使用する引用文字は円記号(\)ですが、LIKE句の直後にあるESCAPE句を使用して変更できます。いずれの場合も、文字通り1文字として一致させるには、引用文字をパターン内で2回繰り返す必要があります。
例:john%node1 ^node2.uccp@の... WHERE field like 'john^%node1^^node2.uucp@%' ESCAPE '^'
後に何かが続くと一致します。
バックスラッシュのデフォルトの選択には問題があります。standard_conforming_stringsがオフの場合、他の目的ですでに使用されています(PG 9.1ではデフォルトでオンになっていますが、以前のバージョンはまだ広く使用されているため、これは考慮事項です)。
また、LIKEワイルドカードの引用は、ユーザー入力インジェクションシナリオでクライアント側で行われる場合、ユーザー入力ですでに必要な通常の文字列引用に追加されます。
go-pgsqlの例を見ると、変数に$ Nスタイルのプレースホルダーが使用されていることがわかります...そこで、なんらかの一般的な方法で記述しようとします。ONまたはOFFの両方でstandard_conforming_stringsで動作し、サーバー側の置換を使用します。 [%_]、代替引用文字、引用文字の引用、およびSQLインジェクションの回避:
db.Query("SELECT * from USERS where name like replace(replace(replace($1,'^','^^'),'%','^%'),'_','^_') ||'%' ESCAPE '^'",
variable_user_input);