当前位置:七道奇文章资讯数据防范MSSQL防范
日期:2011-05-02 15:20:00  来源:本站整理

sql数据的like查询条件[MSSQL防范]

赞助商链接



  本文“sql数据的like查询条件[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
LIKE Transact-SQL 参考

LIKE

肯定给定的字符串能否与指定的情势匹配.情势可以包含通例字符和通配符字符.情势匹配历程中,通例字符必须与字符串中指定的字符完好匹配.但是,可以利用字符串的肆意片段匹配通配符.与利用 = 和 != 字符串对比运算符相比,利用通配符可以使 LIKE 运算符越发机动.假如任何参数都不属于字符串数据范例,Microsoft® sql server™ 会将其转换成字符串数据范例(假如大概).wwww.iTbulo.comIqpmA

语法

match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]wwww.iTbulo.comIqpmA

参数

match_expressionwwww.iTbulo.comIqpmA

任何字符串数据范例的有效 SQL Server 表达式.wwww.iTbulo.comIqpmA

patternwwww.iTbulo.comIqpmA

match_expression 中的搜索情势,可以包含下列有效 SQL Server 通配符.wwww.iTbulo.comIqpmA

通配符 描写 示例
% 包含零个或更多字符的肆意字符串. 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_characterwwww.iTbulo.comIqpmA

字符串数据范例分类中的全部数据范例的任何有效 SQL Server 表达式.escape_character 没有默许值,且必须仅包含一个字符.wwww.iTbulo.comIqpmA

后果范例

Booleanwwww.iTbulo.comIqpmA

后果值

假如 match_expression 匹配指定情势,LIKE 将返回 TRUE.wwww.iTbulo.comIqpmA

注释

当利用 LIKE 举行字符串对比时,情势字符串中的全部字符都有意义,包含起始或尾随空格.假如查询中的对比要返回包含"abc "(abc 后有一个空格)的全部行,则将不会返回包含"abc"(abc 后没有空格)的列所在行.但是可以忽视情势所要匹配的表达式中的尾随空格.假如查询中的对比要返回包含"abc"(abc 后没有空格)的全部行,则将返回以"abc"开始且具有零个或多个尾随空格的全部行.wwww.iTbulo.comIqpmA

由于数据存储方法的缘由,利用包含 char varchar 数据情势的字符串对比大概无法通过 LIKE 对比.理解每种数据范例的存储方法以及招致 LIKE 对比失利的缘由非常重要.下面的示例将部分 char 变量传送给存储历程,然后利用情势匹配查找某个作者的全部著作.在此历程中,作者的姓将作为变量传送.wwww.iTbulo.comIqpmA

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 范例,所以没有尾随空格.因为尾随空格是有意义的,所以此历程失利. wwww.iTbulo.comIqpmA

但下面的示例是成功的,因为尾随空格没有被增添到 varchar 变量中:wwww.iTbulo.comIqpmA

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'

下面是后果集:wwww.iTbulo.comIqpmA

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%' 将找到匹配.wwww.iTbulo.comIqpmA

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 的早期版本兼容.wwww.iTbulo.comIqpmA

下面的一系列示例显示 ASCII LIKE 情势匹配与 Unicode LIKE 情势匹配所返回的行之间的差别:wwww.iTbulo.comIqpmA

-- 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 举行字符串对比,情势字符串中的全部字符都有意义,包含起始空格或尾随空格.wwww.iTbulo.comIqpmA

wwww.iTbulo.comIqpmA

利用 % 通配符

假如指定 LIKE '5%',SQL Server 将搜索背面带有零个或多个肆意字符的数字 5. wwww.iTbulo.comIqpmA

比方,此查询将显示数据库中全部的系统表,因为它们都以字母 sys 开始:wwww.iTbulo.comIqpmA

SELECT TABLE_NAME

FROM INFORMATION_SCHEMA.TABLES

WHERE TABLE_NAME LIKE 'sys%'

阐明  请注意:系统表可以随版本差别而更改.举荐利用信息架构视图或实用的存储历程处理 SQL Server 系统表.wwww.iTbulo.comIqpmA

wwww.iTbulo.comIqpmA

若要查阅非系统表的全部对象,请利用 NOT LIKE 'sys%'.假如共有 32 个对象且 LIKE 找到 13 个与情势匹配的名称,则 NOT LIKE 将找到 19 个与 LIKE 情势不匹配的对象.wwww.iTbulo.comIqpmA

利用 LIKE '[^s][^y][^s]%' 情势不一定每次找到的名称都相同.大概仅得到 14 个名称(而不是 19 个),除了系统表名称外,全部以 s 开始或第二个字母为 y 或第三个字母为 s 的名称也都将从后果中消除.这是因为用反向通配符匹配字符串是分步骤举行计算的,一次一个通配符.假如在计算历程中任一环节匹配失利,那么就会将其消除.wwww.iTbulo.comIqpmA

将通配符作为文字利用

可以将通配符情势匹配字符串用作文字字符串,办法是将通配符放在括号中.下表显示了利用 LIKE 关键字和 [ ] 通配符的示例.wwww.iTbulo.comIqpmA

标记 含义
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 的行.wwww.iTbulo.comIqpmA

下例阐明如安在 pubs 数据库 titles 表的 notes 列中搜索字符串"50% off when 100 or more copies are purchased":wwww.iTbulo.comIqpmA

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 的电话号码.wwww.iTbulo.comIqpmA

USE pubs

GO

SELECT phone

FROM authors

WHERE phone LIKE '415%'

ORDER by au_lname

GO

下面是后果集:wwww.iTbulo.comIqpmA

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 的电话号码.wwww.iTbulo.comIqpmA

USE pubs

GO

SELECT phone

FROM authors

WHERE phone NOT LIKE '415%'

ORDER BY au_lname

GO

下面是后果集:wwww.iTbulo.comIqpmA

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%.wwww.iTbulo.comIqpmA

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 的作者.wwww.iTbulo.comIqpmA

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 的作者所在的行.wwww.iTbulo.comIqpmA

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

请拜见
wwww.iTbulo.comIqpmA

表达式wwww.iTbulo.comIqpmA

函数wwww.iTbulo.comIqpmA

SELECTwwww.iTbulo.comIqpmA

WHEREwwww.iTbulo.comIqpmA

  以上是“sql数据的like查询条件[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • mysql数据库插入速度和读取速度的调整记录
  • 远程衔接mysql数据库注意事项记录(远程衔接慢skip-name-resolve)
  • linux下mysql数据库单向同步配置办法分享
  • mysql数据库互为主从配置办法分享
  • MySQL数据库备份和复原的常用号令小结
  • linux下perl操作mysql数据库(需求安装DBI)
  • Windows服务器下MySql数据库单向主从备份具体实现步骤分享
  • crontab + mysqldump 办理每天按时自动备份MySQL数据库
  • linux按时备份mysql数据库
  • Ubuntu/Window共用MySQL数据库
  • 若何从PowerDesign数据库建模导出至MySQL数据库
  • PostgreSQL数据库远程衔接功效的开启
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .