`
hao84099
  • 浏览: 29245 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

SQL Like通配符 (转)

阅读更多
半角单引号
示例:查询备注字段包含半角单引号的所有学生信息。
select * from Students where desp like '%''%' 或select * from Students where desp like '%['']%' 

通配符%之间的''和['']。其中,第一个'意即转义,第二个'意即真正的半角单引号。



LIKE通配符

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

语法

match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]

参数

match_expression

任何字符串数据类型的有效 SQL Server 表达式。

pattern

match_expression 中的搜索模式,可以包含下列有效 SQL Server 通配符。

通配符
描述
示例

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

_(下划线)
任何单个字符。
WHERE au_fname LIKE '_ean' 将查找以 ean 结尾的所有 4 个字母的名字(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 的所有作者的姓氏。




escape_character

字符串数据类型分类中的所有数据类型的任何有效 SQL Server 表达式。escape_character 没有默认值,且必须仅包含一个字符。

结果类型

Boolean

结果值

如果 match_expression 匹配指定模式,LIKE 将返回 TRUE。

注释

当使用 LIKE 进行字符串比较时,模式字符串中的所有字符都有意义,包括起始或尾随空格。如果查询中的比较要返回包含"abc "(abc 后有一个空格)的所有行,则将不会返回包含"abc"(abc 后没有空格)的列所在行。但是可以忽略模式所要匹配的表达式中的尾随空格。如果查询中的比较要返回包含"abc"(abc 后没有空格)的所有行,则将返回以"abc"开始且具有零个或多个尾随空格的所有行。

由于数据存储方式的原因,使用包含 char 和 varchar 数据模式的字符串比较可能无法通过 LIKE 比较。了解每种数据类型的存储方式以及导致 LIKE 比较失败的原因十分重要。下面的示例将局部 char 变量传递给存储过程,然后使用模式匹配查找某个作者的所有著作。在此过程中,作者的姓将作为变量传递。

CREATE PROCEDURE find_books @AU_LNAME char(20)

AS

SELECT @AU_LNAME = RTRIM(@AU_LNAME) + '%'

SELECT t.title_id, t.title 

FROM authors a, titleauthor ta, titles t

WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id

   AND a.au_lname LIKE @AU_LNAME


当名字中包含的字符数小于 20 时,char 变量 (@AU_LNAME) 将包含尾随空格,这导致 find_books 过程中没有行返回。由于 au_lname 列为 varchar 类型,所以没有尾随空格。因为尾随空格是有意义的,所以此过程失败。

但下面的示例是成功的,因为尾随空格没有被添加到 varchar 变量中:
USE pubs

GO

CREATE PROCEDURE find_books2 @au_lname varchar(20)

AS

SELECT t.title_id, t.title 

FROM authors a, titleauthor ta, titles t

WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id

   AND a.au_lname LIKE @au_lname + '%'

 

EXEC find_books2 'ring'


下面是结果集:

title_id title                                                                           

-------- ---------------------------------------------------------------

MC3021   The Gourmet Microwave                                                           

PS2091   Is Anger the Enemy?                                                             

PS2091   Is Anger the Enemy?                                                             

PS2106   Life Without Fear                                                               



(4 row(s) affected)

使用 LIKE 的模式匹配

当搜索 datetime 值时,推荐使用 LIKE,因为 datetime 项可能包含各种日期部分。例如,如果将值 19981231 9:20 插入到名为 arrival_time 的列中,则子句 WHERE arrival_time = 9:20 将无法找到 9:20 字符串的精确匹配,因为 SQL Server 将其转换为 1900 年 1 月 1 日上午 9:20。然而,子句 WHERE arrival_time LIKE '%9:20%' 将找到匹配。

LIKE 支持 ASCII 模式匹配和 Unicode 模式匹配。当所有参数,包括 match_expression、pattern 和 escape_character(如果有)都是 ASCII 字符数据类型时,将执行 ASCII 模式匹配。如果其中任何参数属于 Unicode 数据类型,则所有参数将被转换为 Unicode 并执行 Unicode 模式匹配。当对 Unicode 数据(nchar 或 nvarchar 数据类型)使用 LIKE 时,尾随空格是有意义的。但是对于非 Unicode 数据,尾随空格没有意义。Unicode LIKE 与 SQL-92 标准兼容。ASCII LIKE 与 SQL Server 的早期版本兼容。

下面的一系列示例显示 ASCII LIKE 模式匹配与 Unicode LIKE 模式匹配所返回的行之间的差异:
-- ASCII pattern matching with char column

CREATE TABLE t (col1 char(30))

INSERT INTO t VALUES ('Robert King')

SELECT * 

FROM t 

WHERE col1 LIKE '% King'   -- returns 1 row

 

-- Unicode pattern matching with nchar column

CREATE TABLE t (col1 nchar(30))

INSERT INTO t VALUES ('Robert King')

SELECT * 

FROM t 

WHERE col1 LIKE '% King'   -- no rows returned

 

-- Unicode pattern matching with nchar column and RTRIM

CREATE TABLE t (col1 nchar (30))

INSERT INTO t VALUES ('Robert King')

SELECT * 

FROM t 

WHERE RTRIM(col1) LIKE '% King'   -- returns 1 row


说明  如果使用 LIKE 进行字符串比较,模式字符串中的所有字符都有意义,包括起始空格或尾随空格。

使用 % 通配符

如果指定 LIKE '5%',SQL Server 将搜索后面带有零个或多个任意字符的数字 5。

例如,此查询将显示数据库中所有的系统表,因为它们都以字母 sys 开始:
SELECT TABLE_NAME

FROM INFORMATION_SCHEMA.TABLES

WHERE TABLE_NAME LIKE 'sys%'


说明  请注意:系统表可以随版本不同而更改。推荐使用信息架构视图或适用的存储过程处理 SQL Server 系统表。

若要查阅非系统表的所有对象,请使用 NOT LIKE 'sys%'。如果共有 32 个对象且 LIKE 找到 13 个与模式匹配的名称,则 NOT LIKE 将找到 19 个与 LIKE 模式不匹配的对象。

使用 LIKE '[^s][^y][^s]%' 模式不一定每次找到的名称都相同。可能仅得到 14 个名称(而不是 19 个),除了系统表名称外,所有以 s 开始或第二个字母为 y 或第三个字母为 s 的名称也都将从结果中消除。这是因为用反向通配符匹配字符串是分步骤进行计算的,一次一个通配符。如果在计算过程中任一环节匹配失败,那么就会将其消除。

将通配符作为文字使用

可以将通配符模式匹配字符串用作文字字符串,方法是将通配符放在括号中。下表显示了使用 LIKE 关键字和 [ ] 通配符的示例。

符号
含义

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




使用 ESCAPE 子句的模式匹配

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

下例说明如何在 pubs 数据库 titles 表的 notes 列中搜索字符串"50% off when 100 or more copies are purchased":
USE pubs

GO

SELECT notes

FROM titles

WHERE notes LIKE '50%% off when 100 or more copies are purchased' 

   ESCAPE '%'

GO

示例

A. 使用带 % 通配符的 LIKE

下例查找 authors 表中所有区号为 415 的电话号码。
USE pubs

GO

SELECT phone

FROM authors

WHERE phone LIKE '415%'

ORDER by au_lname

GO

下面是结果集:

phone       

------------

415 658-9932

415 548-7723

415 836-7128

415 986-7020

415 836-7128

415 534-9219

415 585-4620

415 354-7128

415 834-2919

415 843-2991

415 935-4228



(11 row(s) affected)

B. 使用带 % 通配符的 NOT LIKE

下例查找 authors 表中所有区号不是 415 的电话号码。
USE pubs

GO

SELECT phone

FROM authors

WHERE phone NOT LIKE '415%'

ORDER BY au_lname

GO

下面是结果集:

phone       

------------

503 745-6402

219 547-9982

615 996-8275

615 297-2723

707 938-6445

707 448-4982

408 286-2428

301 946-8853

801 826-0752

801 826-0752

913 843-0462

408 496-7223



(12 row(s) affected)

C. 使用 ESCAPE 子句

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

USE pubs

GO

IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES

      WHERE TABLE_NAME = 'mytbl2')

   DROP TABLE mytbl2

GO

USE pubs

GO

CREATE TABLE mytbl2

(

c1 sysname

)

GO

INSERT mytbl2 VALUES ('Discount is 10-15% off')

INSERT mytbl2 VALUES ('Discount is .10-.15 off')

GO

SELECT c1

FROM mytbl2

WHERE c1 LIKE '%10-15!% off%' ESCAPE '!'

GO

D. 使用 [ ] 通配符

下例查找名字为 Cheryl 或 Sheryl 的作者。
USE pubs

GO

SELECT au_lname, au_fname, phone

FROM authors

WHERE au_fname LIKE '[CS]heryl'

ORDER BY au_lname ASC, au_fname ASC

GO

下例查找姓为 Carson、Carsen、Karson 或 Karsen 的作者所在的行。

USE pubs

GO

SELECT au_lname, au_fname, phone

FROM authors

WHERE au_lname LIKE '[CK]ars[eo]n'

ORDER BY au_lname ASC, au_fname ASC

GO
分享到:
评论

相关推荐

    SQL 通配符

    在SQL(结构化查询语言)中,通配符是一种强大的工具,用于在查询时匹配不完全确定的数据。它们允许用户模糊搜索,这对于数据挖掘、数据分析和日志查询等任务非常有用。下面我们将深入探讨SQL中的两种主要通配符:百...

    SQL Server 2005 通配符及其意义

    在SQL Server 2005中,通配符是用于数据检索时匹配字符串模式的关键工具。这些通配符使得查询可以更加灵活,帮助用户在不完全知道确切信息的情况下找到匹配的数据。以下是SQL Server 2005中常用的通配符及其具体含义...

    T-SQL 通配符和逻辑表达式

    在探讨T-SQL通配符和逻辑表达式的应用与注意事项之前,我们首先应当明确这两个概念在数据库查询语言中的核心地位。T-SQL,即Transact-SQL,是Microsoft SQL Server所使用的SQL方言,它不仅支持标准SQL语句,还提供了...

    SQL中查询中使用通配符

    SQL通配符主要用于`LIKE`、`GLOB`、`REGEXP`等操作符中,帮助我们进行更灵活的数据筛选。下面将详细介绍SQL中的几种常见通配符及其用法。 1. `%` - 百分号通配符 `%` 是SQL中最常用的通配符,它代表零个、一个或多...

    SQL语言中使用的通配符

    SQL语言中使用的通配符 SQL语言中使用的通配符是数据库查询中非常重要的概念,它们可以帮助开发者更方便地查询和匹配数据库中的数据。在SQL Server中,通配符主要有四种: "_"、"%"、"[]"和"[^]",每种通配符都有其...

    SQL 通配符DOC版

    SQL 通配符是数据库查询中的重要工具,用于在 WHERE 子句中匹配不完全确定的数据。它们在配合 LIKE 运算符使用时,能够帮助用户模糊搜索数据库中的记录,适用于那些不知道确切值但知道部分信息的情况。在 SQL 中,...

    sqlserver -like

    在SQL Server中,`LIKE`语句是一种非常实用的搜索工具,它允许用户通过使用通配符来查询数据库中的特定模式。这对于模糊搜索或者部分匹配的情况尤其有用。本文将深入探讨`LIKE`语句的使用方法,特别是如何将通配符...

    SQL 语法 SQL 总结 SQL教程

    SQL Like SQL 通配符 SQL In SQL Between SQL Aliases SQL Join SQL Inner Join SQL Left Join SQL Right Join SQL Full Join SQL Union SQL Select Into SQL Create DB SQL Create Table SQL ...

    sql的like用法

    在SQL查询语言中,`LIKE`是一个非常实用的功能,它允许我们在查询时使用通配符来匹配字符串模式。这在处理大量数据时特别有用,可以帮助我们快速定位到满足特定模式的数据行。下面我们将详细介绍`LIKE`语句的基本...

    SQLLIKE用法.docx

    SQL LIKE 用法详解 SQL LIKE 用法是 SQL 语言中一种常用的字符串匹配方式,用于在查询语句...SQL LIKE 用法需要注意时间查询处理方法、特殊字符处理方法和通配符特殊用法,以便正确地使用 LIKE 操作符进行字符串匹配。

    浅谈MySQL模糊查询中通配符的转义

    sql中经常用like进行模糊查询,而模糊查询就要用到百分号“%”,下划线“_”这些通配符,其中“%”匹配任意多个字符,“_”匹配单个字符。如果我们想要模糊查询带有通配符的字符串,如“60%”,“user_name”,就...

    SQL使用Like模糊查询

    在SQL(Structured Query Language)中,`LIKE` 模糊查询是一种非常实用的功能,它允许用户根据特定的模式匹配数据库中的数据。这个功能在数据检索、分析和处理时尤其有用,尤其是在我们不确定确切的搜索词或者需要...

    详解SQL 通配符

    在 SQL 中,通配符与 SQL LIKE 操作符一起使用。 SQL 通配符用于搜索表中的数据。 在 SQL 中,可使用以下通配符: 通配符 描述 % 替代 0 个或多个字符 _ 替代一个字符 [charlist] 字符列中的任何单一字符 ...

    wildcard_attacks(利用SQL通配符进行DOS攻击)

    SQL Server支持以下通配符用于`LIKE`查询: - `%`:匹配任意数量的字符。 - `[]`:匹配指定范围内的单个字符。 - `[^]`:匹配不在指定范围内的单个字符。 - `_`:匹配单个字符。 例如,如果用户在搜索框中输入`'foo...

    Like-and-OrderBy.rar_sql like order by

    在SQL语言中,LIKE和ORDER BY是两个非常重要的关键字,它们分别用于数据的查询和排序。今天我们将深入探讨这两个概念,以及它们在T-SQL(Transact-SQL,微软SQL Server中的SQL方言)中的具体应用。 首先,我们来...

    SQL语句 SELECT LIKE like用法详解SQL语句 SELECT LIKE like用法详解

    2. `*`:在某些SQL方言中(如MySQL),`*`和`%`功能相同,但在标准SQL中,`*`通常用于目录路径或文件名中的通配符,而不是作为LIKE语句的通配符。 3. `?`:代表单个任意字符。例如,`name like 'b?b'`会返回像“brb...

    MySql模糊查询like通配符使用详细介绍.docx

    MySQL 模糊查询 Like 通配符使用详细介绍 MySQL 提供了两种模式匹配方式:SQL 模式和正则表达式模式。SQL 模式允许使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)。在 MySQL 中,SQL 的模式...

    MySql模糊查询like通配符使用详细介绍.pdf

    MySql 模糊查询 like 通配符使用详细介绍 在 MySQL 中,模糊查询是使用 LIKE 或 NOT LIKE 操作符来实现的。LIKE 操作符可以使用两个通配符:“_”和“%”。“_”表示任意单个字符,而“%”匹配任意数目字符(包括零...

Global site tag (gtag.js) - Google Analytics