2011-08-19 4 views
1

私は、データ列がサンプルデータ次いる列detailsとテーブルT1を持っている:" detail1 detail2 "(Esc '')のようにSQLを適用するにはどうすればよいですか?

select details from T1; 

\this is detail 1\this is detail2\ 
\this is detail 1\this is detail2\ 
:this is detail 1:this is detail2: 
:this is detail 1:this is detail2: 
\this is detail 1\this is detail2\ 

は私が\で分離されているのみdetailsを取得したいです。そのために

は、私は次のクエリを書いた:

select details from T1 where details like '\%\%\'; 

しかし、そのエスケープ補正などの撮影\以来、期待通りに応答しません。

したがって、不完全な単一反転( ')のエラーを示しています!

これはどのようにするのですか?

答えて

4

これを試すには、LIKE文でバックスラッシュを2回エスケープする必要があります。

select details from T1 where details like '\\\\%\\\\%\\\\' 

http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html

MySQLは(改行文字を表現するために例えば、「\ n」は)文字列でCのエスケープ構文を使用しているので、あなたがLIKEの文字列で使用するすべての「\」を二重にする必要があり。たとえば、 "\n"を検索するには、 "\\n"と指定します。 "\"を検索するには、 "\\\\"と指定します。これは、バックスラッシュがパーサーによって一度取り除かれ、パターンマッチが行われたときに再び1つのバックスラッシュがマッチして残るためです。

+0

私はそれを以前に試みたので動作しません。 –

+0

@Yugal:バックスラッシュを2回エスケープしてみてください。 –

+0

@Yugal正しい答えです。スラッシュごとに4つのスラッシュ\\\\を使用する必要があります。 PHPなどのプログラミング言語でこのクエリを実行すると、スラッシュごとに8つのスラッシュが必要になります。mysql_query( "\\\\\\\%%\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\%\\\\\\ '")); – Karolis

-1

は '\\%\\%\\' を使用してみてください - にバックスラッシュを使用してバックスラッシュをエスケープします。

+0

弟.. –

関連する問題