SQLのすべての特殊文字の完全なリストは何ですか(私はSQL Serverに興味がありますが、他のものも良いでしょう)LIKE句?
例えば。
SELECT Name FROM Person WHERE Name LIKE '%Jon%'
%
-0個以上の文字の文字列。_
-任意の1文字%
-0個以上の文字の文字列。_
-任意の1文字Sybase
%
-0個以上の文字の文字列。_
-任意の1文字
参照ガイドはこちら [PDF]
%
-0個以上の文字の文字列。_
-任意の1文字PostgreSQLには、次を追加するSIMILAR TO
演算子もあります。
[specifier]
[^specifier]
|
-2つの選択肢のいずれか*
-前のアイテムの0回以上の繰り返し。+
-前のアイテムを1回以上繰り返します。()
-アイテムをグループ化するこれは、これを「ワンストップショップ」になるコミュニティWikiにすることです。
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でないすべての著者の姓。
多くのデータベースが標準ルールに準拠せず、余分な文字を追加したり、ESCAPEが欠落している場合にデフォルト値「\」で誤って有効にしたりするのは残念です。 「\」で問題が発生していないようです!
ここでDBMSに依存しないコードを記述することは不可能です。エスケープする必要がある文字がわからないため、標準では、エスケープする必要のないものをエスケープできないとされています。 (セクション8.5 /一般規則/3.a.iiを参照してください。)
SQLありがとう! gnnn
SQL Serverの既存の 'をエスケープするには、追加の'を追加する必要があることを追加する必要があります。
スミス->スミス
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."
興味深いことに、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式内で使用する文字列を自動的にエスケープできる可能性があるようです。