SQL LIKE子句的特殊字符列表
什么是一个SQL的所有特殊字符的完整列表(我对SQL Server感兴趣,但其他人也会好)LIKE子句?
例如
SELECT Name FROM Person WHERE Name LIKE '%Jon%'
SQL Server :
- %
- _
- [说明符]例如[az]
- [^符]
- ESCAPE子句例如%30!%%'ESCAPE'!' 将评估30%为真实
- '人物需要逃避'例如,他们成为他们的
MySQL的:
-
%
– 零个或多个字符的任何string。 -
_
– 任何单个字符 - ESCAPE子句例如%30!%%'ESCAPE'!' 将评估30%为真实
甲骨文:
-
%
– 零个或多个字符的任何string。 -
_
– 任何单个字符 - ESCAPE子句例如%30!%%'ESCAPE'!' 将评估30%为真实
SYBASE
- %
- _
- [说明符]例如[az]
- [^符]
进展:
-
%
– 零个或多个字符的任何string。 -
_
– 任何单个字符参考指南 [PDF]
PostgreSQL的:
-
%
– 零个或多个字符的任何string。 -
_
– 任何单个字符
ANSI SQL92:
- %
- _
- 只有在指定了 ESCAPE字符的情况下 。
PostgreSQL也有SIMILAR TO
操作符,它增加了以下内容:
-
[specifier]
-
[^specifier]
-
|
– 两种select之一 -
*
– 重复前一个项目零次或多次。 -
+
– 重复前一个项目一次或多次。 -
()
– 将项目组合在一起
这个想法是使这个社区维基,可以成为一个“一站式”的。
对于SQL Server,请访问http://msdn.microsoft.com/en-us/library/ms179859.aspx :
-
%零个或多个字符的任何string。
WHERE title LIKE '%computer%'
在书名的任何地方都能find所有的书名和“computer”这个词。 -
_任何单个字符。
WHERE au_fname LIKE '_ean'
查找WHERE au_fname LIKE '_ean'
所有四个字母的名字(Dean,Sean等)。 -
[]指定范围([af])或设置([abcdef])内的任何单个字符。
WHERE au_lname LIKE '[CP]arsen'
find作者以arsen结尾的姓,并且以C和P之间的任何单个字符开头,例如Carsen,Larsen,Karsen等等。 在范围search中,范围中包含的字符可能因sorting规则而异。 -
[^]任何不在指定范围内的单个字符([^ af])或set([^ abcdef])。
WHERE au_lname LIKE 'de[^l]%'
所有作者的姓氏以de开头,而后面的字母不是l。
ANSI SQL92 :
- %
- _
- 只有在指定了ESCAPE字符的情况下 。
令人失望的是,许多数据库不符合标准规则并添加额外的字符,或者在缺less缺省值时使用默认值“\”错误地启用ESCAPE。 就像我们已经没有足够的麻烦了'\'!
在这里编写独立于DBMS的代码是不可能的,因为你不知道你将要逃脱哪些字符,标准说你不能逃避那些不需要转义的东西。 (见第8.5节/总则/ 3.a.ii。)
谢谢SQL! gnnn
你应该补充一点,你必须在SQL Server中添加一个额外的'逃避exise':
史密斯的 – >史密斯的
Sybase:
% : Matches any string of zero or more characters. _ : Matches a single character. [specifier] : Brackets enclose ranges or sets, such as [af] 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 [af], 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. [^af] means "not in the range af"; [^a2bR] means "not a, 2, b, or R."
SQL Server的潜在答案
有趣的是,我刚刚使用LinqPad和SQL Server进行了一个testing,它应该只是将Linq运行到SQL下面,并生成以下SQL语句。
logging。其中(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 '~'
所以我还没有testing它,但它看起来像ESCAPE '~'
关键字可能会允许自动转义string在类似的expression式中使用。