SQL的所有特殊字符的完整列表是什么(我对SQL Server感兴趣,但其他的也很好)LIKE子句?
E.g。
SELECT Name FROM Person WHERE Name LIKE '%Jon%'
%
- 任何零个或多个字符的字符串。_
- 任何单个字符%
- 任何零个或多个字符的字符串。_
- 任何单个字符的Sybase
%
- 任何零个或多个字符的字符串。 _
- 任何单个字符
Reference Guide here [PDF]
%
- 任何零个或多个字符的字符串。_
- 任何单个字符 PostgreSQL还有SIMILAR TO
运算符,它添加了以下内容:
[specifier]
[^specifier]
|
- 两种选择中的任何一种*
- 重复上一个项目零次或多次。+
- 重复上一个项目一次或多次。()
- 将项目组合在一起这个想法是让这个社区Wiki成为一个“一站式商店”。
答案 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。就像我们在'\'时已经没有足够的麻烦了!
在这里编写与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)
有趣的是我刚刚使用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 '~'
关键字可能允许自动转义字符串以便在类似的表达式中使用。