web-dev-qa-db-ja.com

SQL LIKE句の特殊文字のリスト

SQLのすべての特殊文字の完全なリストは何ですか(私はSQL Serverに興味がありますが、他のものも良いでしょう)LIKE句?

例えば。

SELECT Name FROM Person WHERE Name LIKE '%Jon%'

SQL Server

  1. _
  2. [指定子]例えば[a-z]
  3. [^指定子]
  4. ESCAPE句%30!%% 'ESCAPE'! ' 30%がtrueと評価されます
  5. '文字は'でエスケープする必要があります。彼らは彼らになる」

MySQL:

  1. %-0個以上の文字の文字列。
  2. _-任意の1文字
  3. ESCAPE句%30!%% 'ESCAPE'! ' 30%がtrueと評価されます

Oracle:

  1. %-0個以上の文字の文字列。
  2. _-任意の1文字
  3. ESCAPE句%30!%% 'ESCAPE'! ' 30%がtrueと評価されます

Sybase

  1. _
  2. [指定子]例えば[a-z]
  3. [^指定子]

進行:

  1. %-0個以上の文字の文字列。
  2. _-任意の1文字

    参照ガイドはこちら [PDF]

PostgreSQL:

  1. %-0個以上の文字の文字列。
  2. _-任意の1文字
  3. ESCAPE句%30!%% 'ESCAPE'! ' 30%がtrueと評価されます

ANSI SQL92:

  1. _
  2. ESCAPE文字が指定されている場合のみ

PostgreSQLには、次を追加するSIMILAR TO演算子もあります。

  1. [specifier]
  2. [^specifier]
  3. |-2つの選択肢のいずれか
  4. *-前のアイテムの0回以上の繰り返し。
  5. +-前のアイテムを1回以上繰り返します。
  6. ()-アイテムをグループ化する

これは、これを「ワンストップショップ」になるコミュニティWikiにすることです。

113
Jonathan Parker

SQL Serverの場合、- http://msdn.Microsoft.com/en-us/library/ms179859.aspx から:

  • %0個以上の文字の文字列。

    WHERE title LIKE '%computer%'は、書籍タイトル内の任意の場所にある単語「コンピューター」を含むすべての書籍タイトルを検索します。

  • _任意の1文字。

    WHERE au_fname LIKE '_ean'は、eanで終わるすべての4文字の名(Dean、Seanなど)を検索します。

  • []指定された範囲([a-f])またはセット([abcdef])内の任意の1文字。

    WHERE au_lname LIKE '[C-P]arsen'は、arsenで終わり、CとPの間の任意の1文字で始まる著者の姓、たとえばCarsen、Larsen、Karsenなどを検索します。範囲検索では、範囲に含まれる文字は、照合の並べ替え規則によって異なる場合があります。

  • [^]指定された範囲([^ a-f])またはセット([^ abcdef])内にない単一の文字。

    WHERE au_lname LIKE 'de[^l]%' deで始まり、次の文字がlでないすべての著者の姓。

21
Çağdaş Tekin

ANSI SQL92

  • _
  • eSCAPE文字が指定されている場合のみ

多くのデータベースが標準ルールに準拠せず、余分な文字を追加したり、ESCAPEが欠落している場合にデフォルト値「\」で誤って有効にしたりするのは残念です。 「\」で問題が発生していないようです!

ここでDBMSに依存しないコードを記述することは不可能です。エスケープする必要がある文字がわからないため、標準では、エスケープする必要のないものをエスケープできないとされています。 (セクション8.5 /一般規則/3.a.iiを参照してください。)

SQLありがとう! gnnn

6
bobince

SQL Serverの既存の 'をエスケープするには、追加の'を追加する必要があることを追加する必要があります。

スミス->スミス

5
Heather M

Sybase:

%              : Matches any string of zero or more characters.
_              : Matches a single character.
[specifier]    : Brackets enclose ranges or sets, such as [a-f] 
                 or [abcdef].Specifier  can take two forms:

                 rangespec1-rangespec2: 
                   rangespec1 indicates the start of a range of characters.
                   - is a special character, indicating a range.
                   rangespec2 indicates the end of a range of characters.

                 set: 
                  can be composed of any discrete set of values, in any 
                  order, such as [a2bR].The range [a-f], and the 
                  sets [abcdef] and [fcbdae] return the same 
                  set of values.

                 Specifiers are case-sensitive.

[^specifier]    : A caret (^) preceding a specifier indicates 
                  non-inclusion. [^a-f] means "not in the range 
                  a-f"; [^a2bR] means "not a, 2, b, or R."
1
Learning

SQL Serverの潜在的な答え

興味深いことに、LinqPadを使用してSQL Serverでテストを実行しました。このテストでは、Linq to SQLを実行して、次のSQLステートメントを生成します。

レコード.Where(r => r.Name.Contains( "lkjwer --_〜[]"))

-- Region Parameters
DECLARE @p0 VarChar(1000) = '%lkjwer--~_~~~[]%'
-- EndRegion
SELECT [t0].[ID], [t0].[Name]
FROM [RECORDS] AS [t0]
WHERE [t0].[Name] LIKE @p0 ESCAPE '~'

そのため、まだテストしていませんが、ESCAPE '~'キーワードを使用すると、like式内で使用する文字列を自動的にエスケープできる可能性があるようです。

0
jpierson