sql中萬用字元的使用要點

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 變數傳遞給預存程序,然後利用模式比對的方式,找出某個作者的所有書籍。在此程序中,作者的姓氏會被當作變數傳遞。

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

find_books 程序不會傳回任何資料列,因為只要名稱短於 20 個字元,char 變數 (@AU_LNAME) 後面就含有空白格。由於 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 '

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值