SQL LIKE子句的特殊字符列表

什么是一个SQL的所有特殊字符的完整列表(我对SQL Server感兴趣,但其他人也会好)LIKE子句?

例如

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

SQL Server :

  1. _
  2. [说明符]例如[az]
  3. [^符]
  4. ESCAPE子句例如%30!%%'ESCAPE'!' 将评估30%为真实
  5. '人物需要逃避'例如,他们成为他们的

MySQL的:

  1. % – 零个或多个字符的任何string。
  2. _ – 任何单个字符
  3. ESCAPE子句例如%30!%%'ESCAPE'!' 将评估30%为真实

甲骨文:

  1. % – 零个或多个字符的任何string。
  2. _ – 任何单个字符
  3. ESCAPE子句例如%30!%%'ESCAPE'!' 将评估30%为真实

SYBASE

  1. _
  2. [说明符]例如[az]
  3. [^符]

进展:

  1. % – 零个或多个字符的任何string。
  2. _ – 任何单个字符

    参考指南 [PDF]

PostgreSQL的:

  1. % – 零个或多个字符的任何string。
  2. _ – 任何单个字符

ANSI SQL92:

  1. _
  2. 只有在指定了 ESCAPE字符的情况

PostgreSQL也有SIMILAR TO操作符,它增加了以下内容:

  1. [specifier]
  2. [^specifier]
  3. | – 两种select之一
  4. * – 重复前一个项目零次或多次。
  5. + – 重复前一个项目一次或多次。
  6. () – 将项目组合在一起

这个想法是使这个社区维基,可以成为一个“一站式”的。

对于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式中使用。

Interesting Posts