cmysql模糊查询语句_SQL模糊查询语句(like)
确定给定的字符串是否与指定的模式匹配。模式可以包含常规字符和通配符字符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。然⽽,可 使⽤字符串的任意⽚段匹配通配符。与使⽤ = 和 != 字符串⽐较运算符相⽐,使⽤通配符可使 LIKE 运算符更加灵活。如果任何参数都不属于字符串数据类型,Microsoft SQL Server 会将其转换成字符串数据类型(如果可能)。
语法
match_expression[ NOT ] LIKEpattern[ ESCAPEescape_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
python的几个方向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 Microwavecodeblocks中文教程
PS2091 Is Anger the Enemy
PS2091 Is Anger the Enemy
PS2106 Life Without Fearsvga游戏
(4 row(s) affected)
使⽤ LIKE 的模式匹配
当搜索datetime值时,推荐使⽤ LIKE,因为datetime项可能包含各种⽇期部分。例如,如果将值 19981231 9:20 插⼊到名为
arrival_time的列中,则⼦句 WHEREarrival_time= 9:20 将⽆法到 9:20 字符串的精确匹配,因为 SQL Server 将其转换为 1900 年1 ⽉ 1 ⽇上午 9:20。然⽽,⼦句 WHEREarrival_timeLIKE '%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')
java程序员日常工作
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 关键字和 [ ] 通配符的⽰例。
符号
含义
java面试题文档
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
mysql语句分类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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。