0

! @ # $ % ^ & * ( ) '\フィールドコンテンツSQLiteデータベース内でこれらのシンボルを検索する必要があります。次のSQL文字列を使用しています

Select ID From Tasks Where '--' || tasks || '--' ||  note || '--'  like '%! @ # $ % ^ & * ( ) ""%' 

または私はこれを試しました

Select ID From Tasks Where task LIKE '[!] [@] [#] [$] [%] [^] [&] [*] [(] [)] ''%'

しかし、検索は結果を返しません。フィールドtaskのコンテンツの一部は

  1. Today's tasksまた

  2. here are some wildcards ! @ # $ % ^ & * ( ) 'また

  3. Some brakest are [ ] { } ( )

したがって、アイテム 1 を全体として検索すると、それを取得する必要があり、 を検索すると! @ # $ % ^ & * ( ) '、アイテム 2 を取得する必要があります。

フィールド内でテキスト内のワイルドカードの一部を渡すか、すべてを同じ順序で渡す場合、値を含む行を取得する必要があります

一部の記号は sqlite sql で意味があることを知っているので、sql クエリ文字列でこれらの文字のすべてまたは一部をエスケープするにはどうすればよいですか

4

2 に答える 2

1

私はこれを使用します:

Select ID From Contacts Where (email || mobile || main || other) GLOB '*[!@#$%^&*()\]*'
于 2013-02-12T06:31:00.110 に答える
1

まず、SQL の文字列は一重引用符で囲みます。一重引用符を含む文字列を書きたい場合は、それらを二重にしてエスケープする必要があります。

SELECT ID FROM Tasks WHERE task = 'Today''s tasks'

これを避けるために、ほとんどの言語ではパラメーターを使用できます。

db.execute("SELECT ID FROM Tasks WHERE task = ?", [ "Today's tasks" ])

第 2 に、演算子はおよび文字を特別にLIKE解釈します。これらの文字を特別な意味を持たずに使用するには、を使用して、、、およびそれ自体をエスケープする文字を指定できます。%_ESCAPE%_

SELECT ID FROM Tasks WHERE task LIKE '%! @@ # $ @% ^ & * ( ) ''%' ESCAPE '@'

このエスケープは、SQL 文字列の引用とは完全に独立しています。パラメータを使用している場合でも、使用する必要があります。

db.execute("SELECT ID FROM Tasks WHERE task LIKE ? ESCAPE '@'",
           [ "%! @@ # $ @% ^ & * ( ) '%" ])

第 3 に、GLOB演算子には特殊なエスケープ文字がありません。特殊文字を文字どおりに使用する場合は、特殊な方法で使用する必要があります。ドキュメントから:

グロビングのルール:

  • '*' 0 個以上の文字の任意のシーケンスに一致します。
  • '?' 正確に 1 文字に一致します。
  • [...] 囲まれた文字リストの 1 文字に一致します。
  • [^...] 囲まれたリストにない 1 文字に一致します。

[...]and[^...]マッチングを使用すると、 or']'の後の最初の文字にすることで、文字をリストに含めることができます。を使用して文字の範囲を指定できます。例: 任意の 1 つの小文字に一致します。に一致させるには、リストの最後の文字にします。'[''^''-'"[a-z]"'-'

ヒント:'*'またはに合わせ'?'て、 に入れます"[]"。このような:

abc[*]xyz 一致"abc*xyz"のみ

于 2013-02-15T12:44:35.880 に答える