2011-09-06 12 views
47

SQLite likeステートメントでアンダースコア文字が何をするのか分かりません。 ワイルドカード文字%は、おそらく他のほとんどのSQLデータベースと同じです。SQLite Like%と_

だから、気になる_キャラクターはどうしますか?

答えて

58

アンダースコアは他のほとんどのSQLデータベースと同じで、任意の1文字に一致します(つまり、正規表現では.と同じです)。 fine manualから:LIKEパターンで

アンダースコア(「_」)文字列内の任意の1文字に一致します。例えば

-- The '_' matches the single 'c' 
sqlite> select 'pancakes' like 'pan_akes'; 
1 
-- This would need '__' to match the 'ca', only one '_' fails. 
sqlite> select 'pancakes' like 'pan_kes'; 
0 
-- '___' also fails, one too many '_'. 
sqlite> select 'pancakes' like 'pan___kes'; 
0 

そして、ちょうど結果が意味をなすことを確認する:SQLiteはzero and one for booleansを使用しています。

+1

ありがとうございます。 [余分な文字] – Francisc

+0

注: ''pan__kes'のような 'パンケーキ'を選択してください。 –

76

それはLIKE式で標準SQLです:

  • %空のものを含め、任意の文字列にマッチします。正規表現では.*に相当します。
  • _は、1文字に一致します。正規表現では.に相当します。
  • あなたが%_をエスケープするための文字を選択することができますし、と自分自身そのもの:

    ... WHERE expr LIKE 'a_b%c\\d\%\_' ESCAPE '\' 
    

    は、これが一致しますa×b×××c\d%_a×bc\d%_なくabc\d%_a×b×××cd%_

のSQLiteとAdditionnallyあなたはその%*なり、_?なり除いて、まったく同じように動作しGLOBキーワードを持っています。

+0

ありがとう、Benoit。私は時間だけで判断するもう一つの答えを選びました。 – Francisc

+0

これは私の人生を救った。私はSQLiteクエリで '%'をエスケープする方法を探していました。しかし、私はJavscript + WebSQLに取り組んでいただけでなく、 '\'を働かせるために '\\'を与えなければなりませんでした。以下のクエリは私のために働いた。 SELECT * FROMには、タイトル%LIKE '%50 \\ %%' ESCAPE '\\'(タイトルが50%のすべてのオファーが返されます) – hashcoder

+0

@Franciscを提供しています。しかし、この答えは現在受け入れられている答えよりもはっきりしています。これは将来のユーザーに受け入れられる答えにするサービスです。 – Suragch

0

私はXCode/Objective-C環境で使用していますが、 '\'は機能しません。

:代わりに何かを使用して...

C-スタイルは、彼らは、標準のSQL(https://www.sqlite.org/lang_expr.html)ブノワの答え@に

6

補遺ではないので、バックスラッシュ文字がサポートされていない使用してエスケープESCAPEは、すべてのLIKE式ではなく、最新のLIKE式に適用されます。すべてをエスケープするには、ESCAPEを以下のように複数回使用する必要があります。

WHERE foo LIKE '%bar^%%' ESCAPE '^' AND foo LIKE '%baz^_%' ESCAPE '^' 

この述語は、バー%、またはバズに加えて任意の文字を含むfooの値と一致しました。

関連する問題