SQLLike 子句的特殊字符列表

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

例如。

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

SQL Server :

  1. %
  2. 我不知道
  3. 例如[ a-z ]
  4. [ ^ 说明符]
  5. ESCAPE 子句,例如% 30!% “ ESCAPE”!’将评估30% 为真
  6. 角色需要逃避,例如,他们变成了他们

MySQL:

  1. %-任何零个或多个字符的字符串。
  2. _-任意单个字符
  3. ESCAPE 子句,例如% 30!% “ ESCAPE”!’将评估30% 为真

甲骨文:

  1. %-任何零个或多个字符的字符串。
  2. _-任意单个字符
  3. ESCAPE 子句,例如% 30!% “ ESCAPE”!’将评估30% 为真

赛贝斯

  1. %
  2. 我不知道
  3. 例如[ a-z ]
  4. [ ^ 说明符]

进展:

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

    参考指引(只提供英文版本) [ PDF ]

PostgreSQL:

  1. %-任何零个或多个字符的字符串。
  2. _-任意单个字符
  3. ESCAPE 子句,例如% 30!% “ ESCAPE”!’将评估30% 为真

ANSI SQL92:

  1. %
  2. 我不知道
  3. ESCAPE 字符 只有在指定的情况下

PostgreSQL 还有一个 SIMILAR TO操作符,它添加了以下内容:

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

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

321169 次浏览

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

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

    WHERE title LIKE '%computer%'可以在书名中的任何地方找到所有带有单词“计算机”的书名。

  • 任何一个字符。

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

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

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

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

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

赛贝斯:

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

ANSI SQL92 :

  • %
  • 我不知道
  • 转义字符 只有在指定的情况下

令人失望的是,许多数据库没有遵守标准规则并添加额外的字符,或者在缺少 ESCAPE 时错误地使用默认值‘’。好像我们还不够烦恼“”这个词似的!

在这里编写独立于 DBMS 的代码是不可能的,因为您不知道需要转义哪些字符,而且标准规定您不能转义不需要转义的内容。(见第8.5条/一般规则/3。)

谢谢 SQL! gnnn

您应该添加必须添加一个额外的“以转义 SQLServer 中的现有”:

史密斯的-> 史密斯的

SQLServer 的潜在答案

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

记录 . 其中(r = > r. Name. 容纳(“ 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 表达式中使用字符串的自动转义。