程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> sql數據的like查詢條件

sql數據的like查詢條件

編輯:關於SqlServer
Transact-SQL 參考

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_expressionpattern escape_character(如果


您正在看的SQLserver教程是:sql數據的like查詢條件。有)都是 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


您正在看的SQLserver教程是:sql數據的like查詢條件。 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



請參見

表達式

函數

SELECT

WHERE

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved