LIKE 

确定给定的字符串是否与指定的模式匹配。模式可以包含常规字符和通配符字符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。然而,可使用字符串的任意片段匹配通配符。与使用 = 和 != 字符串比较运算符相比,使用通配符可使 LIKE 运算符更加灵活。如果任何参数都不属于字符串数据类型,Microsoft® SQL Server™ 会将其转换成字符串数据类型(如果可能)。

语法
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]

参数
match_expression 任何字符串数据类型的有效 SQL Server 表达式。
patternmatch_expression 中的搜索模式,可以包含下列有效 SQL Server 通配符

1   %  包含零个或更多字符的任意字符串
    示例:WHERE title LIKE '%computer%'  将查找处于书名任意位置的包含单词 computer 的所有书名。

2  _(下划线) 任何单个字符
   示例:WHERE au_fname LIKE '_ean' 将查找以 ean 结尾的所有 4 个字母的名字(Dean、Sean 等)。

3   [] 指定范围中的任何单个字符
   示例:WHERE au_lname LIKE '[C-P]arsen' 将查找以arsen 结尾且以介于 C 与 P 之间的任何单个字符开始的 作者姓氏,例如,Carsen、Larsen、Karsen 等

4 [^]  不属于指定范围中的任何单个字符,与 [] 相反
   示例:WHERE au_lname LIKE 'de[^l]%' 将查找以 de 开始且其后的字母不为 l 的所有作者的姓氏。
 
一 使用 like 的模式匹配:
在搜索Datetime类型时,建议使用like .
LIKE 支持 ASCII 模式匹配和 Unicode 模式匹配。当所有参数,包括 match_expressionpattern escape_character(如果有)都是 ASCII 字符数据类型时,将执行 ASCII 模式匹配。如果其中任何参数属于 Unicode 数据类型,则所有参数将被转换为 Unicode 并执行 Unicode 模式匹配。当对 Unicode 数据(nchar nvarchar 数据类型)使用 LIKE 时,尾随空格是有意义的。但是对于非 Unicode 数据,尾随空格没有意义。Unicode LIKE 与 SQL-92 标准兼容。ASCII LIKE 与 SQL Server 的早期版本兼容

二 使用 % 通配符

例如,此查询将显示数据库中所有的系统表,因为它们都以字母 sys 开始:
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'sys%'
若要查阅非系统表的所有对象,请使用 NOT LIKE 'sys%'。如果共有 32 个对象且 LIKE 找到 13 个与模式匹配的名称,则 NOT LIKE 将找到 19 个与 LIKE 模式不匹配的对象

三 使用escape字句的模式匹配

可搜索包含一个或多个特殊通配符的字符串。例如,customers 数据库中的 discounts 表可能存储含百分号 (%) 的折扣值。若要搜索作为字符而不是通配符的百分号,必须提供 ESCAPE 关键字和转义符。例如,一个样本数据库包含名为 comment 的列,该列含文本 30%。若要搜索在 comment 列中的任何位置包含字符串 30% 的任何行,请指定由 WHERE comment LIKE '%30!%%' ESCAPE '!' 组成的 WHERE 子句。如果不指定 ESCAPE 和转义符,SQL Server 将返回所有含字符串 30 的行

下例使用 ESCAPE 子句和转义符查找 mytbl2 表的 c1 列中的精确字符串 10-15%

Sql Server 中的模式匹配USE pubs
Sql Server 中的模式匹配
GO
Sql Server 中的模式匹配
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
Sql Server 中的模式匹配      
WHERE TABLE_NAME = 'mytbl2')
Sql Server 中的模式匹配   
DROP TABLE mytbl2
Sql Server 中的模式匹配
GO
Sql Server 中的模式匹配
USE pubs
Sql Server 中的模式匹配
GO
Sql Server 中的模式匹配
CREATE TABLE mytbl2
Sql Server 中的模式匹配(
Sql Server 中的模式匹配 c1 sysname
Sql Server 中的模式匹配)
Sql Server 中的模式匹配
GO
Sql Server 中的模式匹配
INSERT mytbl2 VALUES ('Discount is 10-15% off')
Sql Server 中的模式匹配
INSERT mytbl2 VALUES ('Discount is .10-.15 off')
Sql Server 中的模式匹配
GO
Sql Server 中的模式匹配
SELECT c1 
Sql Server 中的模式匹配
FROM mytbl2
Sql Server 中的模式匹配
WHERE c1 LIKE '%10-15!% off%' ESCAPE '!'
Sql Server 中的模式匹配
GO
Sql Server 中的模式匹配
Sql Server 中的模式匹配


四 使用 [] 通配符

下例查找姓为 Carson、Carsen、Karson 或 Karsen 的作者所在的行。
USE pubs
SELECT au_lname, au_fname, phone
FROM authors
WHERE au_lname LIKE '[CK]ars[eo]n'
ORDER BY au_lname ASC, au_fname ASC

补充:

符号                     含义
--------------     ---------------
LIKE '5[%]'              5%
LIKE '[_]n'              _n
LIKE '[a-cdf]'       a、b、c、d 或 f
LIKE '[-acdf]'       -、a、c、d 或 f
LIKE '[ [ ]'              [
LIKE ']'                  ]
LIKE 'abc[_]d%'      abc_d 和 abc_de
LIKE 'abc[def]'     abcd、abce 和
abcf

所以要查询 字段中包含[] 的记录,应该是:
where 字段 like '%[[]%]%'


相关文章:

  • 2021-11-22
  • 2021-05-26
  • 2021-09-29
  • 2021-10-01
  • 2021-06-08
  • 2021-12-09
  • 2022-12-23
猜你喜欢
  • 2022-01-11
  • 2022-12-23
  • 2021-08-09
  • 2022-12-23
  • 2022-12-23
  • 2022-01-23
  • 2021-12-11
相关资源
相似解决方案