iT邦幫忙

DAY 24
8

T-SQL 應用之美系列 第 24

查詢的資料包含萬用字元應如何處置?

在前面幾篇分享的文章中,討論了使用萬用字元:*、%、_、[]、[^] 的方法與時機,這次要討論,萬一所要查詢的資料本身就有這幾個萬用字元時,應該如何處置。
為了方便解說,假設在資料表 TabTest 中,有下列的資料:

如果你需要測試的話,可以直接用下面的程式碼建立資料表並新增相關的資料:

USE tempdb
GO

CREATE TABLE TabTest(
	[地址] nvarchar(50) NOT NULL,
	[折扣] varchar(5) NOT NULL,
	[附註] nvarchar(50) NOT NULL)
GO

SET NOCOUNT ON

INSERT INTO TabTest VALUES('台北市忠孝東路一段10-1號', '30%', '* 此地址為辦公處所')
INSERT INTO TabTest VALUES('台中市東區逢甲大道110號3樓3-1室', '10%' ,'* 按一下 [匯入網際網路郵件及地址]')
INSERT INTO TabTest VALUES('台北市皇后大道123-1號', '12%', '再按一下 [下一步]')
INSERT INTO TabTest VALUES('高雄市美術館東路25號', '15%', '按一下 [匯入及匯出')
INSERT INTO TabTest VALUES('台南市南區港乾路712號2-1樓', '20%', '按一下 [下一步]')
INSERT INTO TabTest VALUES('花蓮市海連路12號', '30%', '按一下 [完成]')

假設要找出 TabTest 資料表中,「折扣」欄位的資料值為 30% 的資料,由於資料有百分比符號 (%) ,要將百分比符號當作一個查詢的字元,而非一個萬用字元來搜尋時,就要使用 ESCAPE 關鍵字並指定適當的「逸出字元」:

SELECT * FROM TabTest
WHERE 折扣 LIKE '%30!%%' ESCAPE '!'

執行結果:

上面程式碼中的 ESCAPE 子句,所指定的字元是 !(驚嘆號),表示說,在 LIKE 子句內的 ! 之後的那個字元(也就是 %)將被視為是一個常數的字元資料,而不是萬用字元。這樣說,大家可能還不是挺清楚的,所以再舉幾個例子來加以說明。

例如,要搜尋「地址」欄位的任何位置,只要含有 - (減號)的任何記錄,可以使用下面的程式碼:

SELECT * FROM TabTest
WHERE 地址 LIKE '%#-%' ESCAPE '#'

執行結果:

例如,要搜尋「附註」欄位的任何位置,只要含有 * (星號)的任何記錄,可以使用下面的程式碼:

SELECT * FROM TabTest
WHERE 附註 LIKE '@*%' ESCAPE '@'

執行結果:

透過下圖,相信大家可以更佳瞭解上面那個程式碼 ESCAPE 子句中的字元與 LIKE 子句中的字元之關係:


上一篇
在 SELECT 中,使用萬用字元 [^]
下一篇
如何找出欄位值是 NULL 的資料
系列文
T-SQL 應用之美30

1 則留言

0
wzl
iT邦新手 5 級 ‧ 2008-09-25 13:10:49

請問一下您的範例中有加入幾個特殊字元如#、@、! 請問各有什麼義意與使用時機及用途
因為三個SQL 都當成逸出字元
謝謝!!

<pre class="c" name="code">SELECT * FROM TabTest   
WHERE 地址 LIKE '%#-%' ESCAPE '#' 




<pre class="c" name="code">SELECT * FROM TabTest   
WHERE 附註 LIKE '@*%' ESCAPE '@'




<pre class="c" name="code">SELECT * FROM TabTest   
WHERE 折扣 LIKE '%30!%%' ESCAPE '!'  
alexc iT邦高手 1 級 ‧ 2008-09-25 20:41:13 檢舉

使用時機在文章內已有說明:
在前面幾篇分享的文章中,討論了使用萬用字元:*、%、_、[]、[^] 的方法與時機,這次要討論,萬一所要查詢的資料本身就有這幾個萬用字元時,應該如何處置。

如果看過前面幾篇關於萬用字元的分享文章,再輔以這次最後一張圖的說明,應該就清楚使用的時機了。

沒有人規定一定只能用這幾個特殊字元:#、@、!,你當然可以用其他的字元

我要留言

立即登入留言