sql中萬用字元的使用要點
語法
match_expression [NOT] LIKE pattern [ESCAPE escape_character]
參數
match_expression
是資料型別為字元字串的任何有效 SQL Server 運算式。
pattern
是要在 match_expression 中搜尋的模式,其中可以包含這些有效的 SQL Server 萬用字元。
1.萬用字元列表
% 任何含有零個或更多字元的字串。
WHERE title LIKE '%computer%' 可找出書名中含有 'computer' 這個字的所有書籍。
_ (底線) 任何單一字元。
WHERE au_fname LIKE '_ean' 可找出所有以 ean 結尾的四個字母的名字 (如 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 的作者。
2.使用萬用字元作為常值
符號 意義
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
3.應用
使用含有 char 和 varchar 資料的模式之字串比較,由於資料儲存方式的問題,可能無法通過 LIKE 比較。因此了解每一種資料型別的儲存方式以及 LIKE 比較可能失敗之處是很重要的。以下範例會將一個區域 char 變數傳遞給預存程序,然後利用模式比對的方式,找出某個作者的所有書籍。在此程序中,作者的姓氏會被當作變數傳遞。
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
find_books 程序不會傳回任何資料列,因為只要名稱短於 20 個字元,char 變數 (@AU_LNAME) 後面就含有空白格。由於 au_lname 資料行是 varchar,因此行尾沒有空白格。此程序失敗,因為行尾有空白格。
然而,以下範例可以執行成功,因為行尾空白不會加進 varchar 變數內:
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 '