SQL LIKE子句的特殊字符列表

时间:2009-04-03 04:49:44

标签: sql special-characters sql-like

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

E.g。

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

SQL Server

  1. _
  2. [说明者]例如[A-Z]
  3. [^符]
  4. ESCAPE条款例如%30!%%'ESCAPE'!'将评估30%为真
  5. '字符需要使用'E.g.他们变成了他们的
  6. MySQL:

    1. % - 任何零个或多个字符的字符串。
    2. _ - 任何单个字符
    3. ESCAPE条款例如%30!%%'ESCAPE'!'将评估30%为真
    4. Oracle:

      1. % - 任何零个或多个字符的字符串。
      2. _ - 任何单个字符
      3. ESCAPE条款例如%30!%%'ESCAPE'!'将评估30%为真
      4. 的Sybase

        1. _
        2. [说明者]例如[A-Z]
        3. [^符]
        4. Progress:

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

            Reference Guide here [PDF]

          3. PostgreSQL:

            1. % - 任何零个或多个字符的字符串。
            2. _ - 任何单个字符
            3. ESCAPE条款例如%30!%%'ESCAPE'!'将评估30%为真
            4. ANSI SQL92:

              1. _
              2. 仅当指定了时才使用ESCAPE字符
              3. PostgreSQL还有SIMILAR TO运算符,它添加了以下内容:

                1. [specifier]
                2. [^specifier]
                3. | - 两种选择中的任何一种
                4. * - 重复上一个项目零次或多次。
                5. + - 重复上一个项目一次或多次。
                6. () - 将项目组合在一起
                7. 这个想法是让这个社区Wiki成为一个“一站式商店”。

5 个答案:

答案 0 :(得分:21)

对于SQL Server,来自http://msdn.microsoft.com/en-us/library/ms179859.aspx

  • %任何零个或多个字符的字符串。

    WHERE title LIKE '%computer%'在书名中找到所有带有“计算机”一词的书名。

  • _任何单个字符。

    WHERE au_fname LIKE '_ean'找到以ean结尾的所有四个字母的名字(Dean,Sean等)。

  • []指定范围内的任何单个字符([a-f])或set([abcdef])。

    WHERE au_lname LIKE '[C-P]arsen'发现作者的姓氏以arsen结尾,并以C和P之间的任何单个字符开头,例如Carsen,Larsen,Karsen等。在范围搜索中,范围中包含的字符可能会根据排序规则的排序规则而有所不同。

  • [^]任何不在指定范围内的单个字符([^ a-f])或set([^ abcdef])。

    WHERE au_lname LIKE 'de[^l]%'所有作者姓氏以de开头,后面的字母不是l。

答案 1 :(得分:6)

<强> ANSI SQL92

  • _
  • 仅当指定了时才使用ESCAPE字符

令人失望的是,许多数据库不遵守标准规则并添加额外字符,或者在缺少时错误地启用默认值为'\'的ESCAPE。就像我们在'\'时已经没有足够的麻烦了!

在这里编写与DBMS无关的代码是不可能的,因为你不知道你将要逃脱哪些角色,标准说你无法逃避不需要转义的东西。 (见第8.5节/一般规则/ 3.a.ii。)

谢谢SQL! gnnn

答案 2 :(得分:5)

您应该补充说,您必须在SQL Server中添加额外的'以逃避现有':

史密斯的 - &gt;史密斯'的

答案 3 :(得分: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."

答案 4 :(得分:0)

SQL Server的潜在答案

有趣的是我刚刚使用LinqPad和SQL Server进行了测试,它应该只是在下面运行Linq to SQL,它会生成以下SQL语句。

记录     .Where(r =&gt; r.Name.Contains(&#34; lkjwer --_~ []&#34;))

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

所以我还没有对它进行测试,但看起来ESCAPE '~'关键字可能允许自动转义字符串以便在类似的表达式中使用。