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


119

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

例えば

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

SQL Server

  1. _
  2. [指定子]例[az]
  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. [指定子]例[az]
  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. * -前のアイテムのゼロ回以上の繰り返し。
  5. + -前のアイテムを1回以上繰り返す。
  6. () -アイテムをグループ化する

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


ESCAPE句について言及する価値があるでしょう。SQL Server、Oracle、MySQLはすべてこれをサポートしています。Sybaseについて知らない。
デイブウェッブ

ESCAPE句が標準SQLであることを今考えているので、おそらく一度だけ言及する必要があります
Dave Webb

記載されているすべてのサーバー(および後で追加される可能性のあるサーバー)に実装されていることを私は知りません。それらがすべてサポートされていると確信している場合は、先に進んでください。
ジョナサンパーカー、

エスケープキャラクター自体をエスケープすることを忘れないでください...
ChristofferHammarström'25 / 07/25

2つのコメント。まず、Microsoft SQLは最初はSybaseから提供されているため、類似点は偶然ではありません。次に、単一引用符を別の引用符でエスケープするのはに限定されませんLIKE。例えばWHERE familyname = 'O''Toole'。3番目に、SIMILAR TOオペレーターは、独自の機能(および多くの特殊文字)を備えた一種のハイブリッド正規表現を導入するため、おそらくここに含めるべきではありません。3つのコメントができると思いますが、スペインの異端審問を期待する人はいません。
Manngo

回答:


22

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

  • %ゼロ以上の文字の文字列。

    WHERE title LIKE '%computer%' 書籍名に「computer」という単語が含まれるすべての書籍名を検索します。

  • _任意の1文字。

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

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

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

  • [^]指定された範囲([^ af])またはセット([^ abcdef])内にない任意の1文字。

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


1
試してみたところ、できるようです。しかし、それは代わりに、あなたがこのような各文字を指定する必要が正規表現のように=> [0-9]ではありません:[0123456789]
ÇağdaşTekinの

3
待って、いいえ。これはRegExのようなものなので、[0-9]も機能します。混乱させて申し訳ありません。
ÇağdaşTekinの

6

ANSI SQL92

  • _
  • ESCAPE文字(指定されている場合のみ)

多くのデータベースが標準ルールに固執せず、余分な文字を追加しないか、欠落している場合にデフォルト値「\」で誤ってESCAPEを有効にするのは残念です。'\'に関してはまだ十分な問題がありません!

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

SQLありがとうございます!gnnn


5

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

smith's-> smith's


1

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."

0

SQL Serverの潜在的な答え

興味深いのは、SQL ServerでLinqPadを使用してテストを実行しただけで、その下で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 '~'

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


ESCAPEエスケープ文字ごとに2文字(たとえば、に%なる~%)を3つではなく(たとえば、なしESCAPE%なる[%])使用できるため、おそらく単に使用しているだけです。
binki
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.