查詢ACCESS時使用萬用字元來簡化工作
我們都知道,在SQL查詢中可以使用百分號%來模糊查詢; 但是,實際上JET-SQL支援好幾種萬用字元, 這意外著,我們在查詢ACCESS和SQL Server時可以更自由的定義模糊查詢的方式,而不是單純死板的只能使用%匹配任意個數的任意字元.
這些萬用字元一般老師不會講,我們也很少注意. 使用得當會提高我們的工作效率,某些工作不再需要編碼完成,簡單一個SQL就能搞定! 當然,比起有名的正則表示式, 還是弱多了! 詳細支援的萬用字元列如下(源自ACCESS線上幫助及<Microsoft Jet SQL參考>):
字元 | 說明 | 示例 |
---|---|---|
* | 與任何個數的字元匹配。在字串中,它可以當作第一個或最後一個字元使用。 | wh* 可以找到 what、white 和 why |
? | 與任何單個字母的字元匹配。 | B?ll 可以找到 ball、bell 和 bill |
[ ] | 與方括號內任何單個字元匹配。 | B[ae]ll 可以找到 ball 和 bell 但找不到 bill |
! | 匹配任何不在方括號之內的字元。 | b[!ae]ll 可以找到 bill 和 bull 但找不到 ball 或 bell |
- | 與某個範圍內的任一個字元匹配。必須按升序指定範圍(A 到 Z,而不是 Z 到 A)。 | b[a-c]d 可以找到 bad、bbd 和 bcd |
# | 與任何單個數字字元匹配。 | 1#3 可以找到 103、113、123 |
在下面的例子裡,會返回以字母 P 開頭、而其後接著介於 A 到 F 之間的任何字母和三個數字的資料:
Like "P[A-F]###"
在下面的列表中說明如何使用 Like 運算子來測試不同樣式的表示式。
符合的種類 |
樣式 |
符合(返回 True ) | 不符合(返回 False ) |
---|---|---|---|
多個字元 | a*a | aa,aBa,aBBBa | aBC |
*ab* | abc,AABB,Xab | aZb,bac | |
特殊字元 | a[*]a | a*a | aaa |
多個字元 | ab* | abcdefg,abc | cab,aab |
單一字元 | a?a | aaa,a3a,aBa | aBBBa |
單一數字 | a#a | a0a,a1a,a2a | aaa,a10a |
字元範圍 | [a-z] | f,p,j | 2, & |
範圍之外 | [!a-z] | 9, &, % | b,a |
非數字 | [!0-9] | A,a,&,~ | 0, 1, 9 |
組合字 | a[!b-m]# | An9,az0,a99 | abc,aj0 |
但實際使用中還有一點我們需要注意,上面的萬用字元是在ACCESS介面中支援的,即在ACCESS的查詢介面或查詢替換對話方塊中使用的,而Jet SQL使用的是另一套,也就是說在我們自己的工程中寫SQL時需要使用下面這套萬用字元:
字元 | 說明 | 示例 |
---|---|---|
% | 與任何個數的字元匹配,在字串中,它可以當作第一個或最後一個字元使用。 | wh% 可以找到 what、white 和 why |
_ | 與任何單個字母的字元匹配。 | B_ll 可以找到 ball、bell 和 bill |
[ ] | 與方括號內任何單個字元匹配。 | B[ae]ll 可以找到 ball 和 bell 但找不到 bill |
^ | 匹配任何不在方括號之內的字元。 | b[^ae]ll 可以找到 bill 和 bull 但找不到 ball 或 bell |
- | 與某個範圍內的任一個字元匹配。必須按升序指定範圍(A 到 Z,而不是 Z 到 A)。 | b[a-c]d 可以找到 bad、bbd 和 bcd |
也許你和我一樣(因為我經常用ACCESS自動生成SQL語句,修改後直接貼到程式碼的SQL裡.),不喜歡在ACCESS中(指直接使用ACCESS程式來開啟mdb檔案)使用*來代替%以匹配多個字元,那麼也有個解決辦法:
開啟ACCESS的工具選單 >> 選項子選單 >> 表/查詢 頁面 >> SQL Server 相容語法(Ansi 92) >> 勾選下面複選框"當前資料庫";
若想將這項"作為新資料庫的預設設定", 那麼你必須先在 高階 頁面 的 預設檔案格式 下拉選單選擇 "ACCESS 2002 - 2003".
經過上面的設定,我們在ACCESS的查詢介面寫SQL就也可以用%來匹配多個字元了.
===================================
非註明轉載的文章和blog在未特殊宣告情況下一般為本人原創或整理,
原創文章版權歸沙漠孤狐(lonefox)所有;轉載文章版權歸原作者所有;
歡迎轉載,但請註明出處,保留作者和版權資訊。
===================================