使用字串比較篩選項目
這個主題會說明使用 Microsoft Jet 語法及 DAV 搜尋及尋找 (DASL) 語法,篩選字串屬性的支援。
分隔字串及使用逸出字元
在比對字串屬性時,您可以使用一對單引號 (') 或一對雙引號 (") 來分隔屬於篩選的字串。 例如,當屬性的類型為 String 時,下列各行都會正確運作:
sFilter = "[CompanyName] = 'Microsoft'"
sFilter = "[CompanyName] = " & Chr(34) & "Microsoft" & Chr(34)
在 Jet 或 DASL 查詢中指定篩選時,如果您使用一對單引號來分隔屬於篩選的字串,而且字串包含另一個單引號或簡縮號 (Apostrophe),請在該單引號或簡縮號前面加上一個單引號做為逸出字元。 如果您使用一對雙引號來分隔字串,也請套用相同的方法。 如果字串包含雙引號,請在雙引號前面加上一個雙引號來做為逸出字元。
例如,在篩選 Subject 屬性等 於 單字 can't
的 DASL 篩選字串中,整個篩選字串會以一對雙引號分隔,而內嵌字串 can't
會以一對單引號分隔。 在此篩選字串中,您需要逸出三個字元:的屬性參考 https://schemas.microsoft.com/mapi/proptag/0x0037001f
的起始雙引號和結尾雙引號,以及單字 can't
值條件中的單引號。
您可以套用適當的逸出字元,如下表示篩選字串:
filter = "@SQL=""https://schemas.microsoft.com/mapi/proptag/0x0037001f"" = 'can''t'"
或者,您可以使用 chr(34)
函式來表示其 ASCII 字元值為 34) 做為逸出字元的雙引號 (。 藉由使用 chr(34)
取代雙引號逸出字元,就能如下表示上列範例:
filter = "@SQL= " & Chr(34) & "https://schemas.microsoft.com/mapi/proptag/0x0037001f" _
& Chr(34) & " = " & "'can''t'"
使用 ci_startswith 或 ci_phrasematch 運算子的 DASL 查詢,也需要逸出單引號及雙引號字元。 例如,下列查詢會在郵件主旨中執行 can't
的片語比對查詢:
filter = "@SQL=" & Chr(34) & "https://schemas.microsoft.com/mapi/proptag/0x0037001E" _
& Chr(34) & " ci_phrasematch " & "'can''t'"
另一個範例是 DASL 篩選字串,其篩選 Subject 屬性等 於字 the right stuff
組,其中的字 stuff
會以雙引弧括住。 在這種情況下,括住的雙引號必須逸出,如下所示:
filter = "@SQL=""https://schemas.microsoft.com/mapi/proptag/0x0037001f"" = 'the right ""stuff""'"
具名屬性中包含空格、單引號或雙引號的屬性參照,則適用另一組逸出規則。 如果屬性參照包含空格、單引號或雙引號字元,您必須在屬性參照中使用統一資源定位器 (URL) 逸出,如下所示:
屬性參照中的字元 | 逸出字元 |
---|---|
空格字元 | %20 |
雙引號 | %22 |
單引號 | %27 |
例如,您會使用下列篩選來搜尋名為 Mom 的 「Gift」 自訂屬性,其中包含 一個字 pearls
:
filter = "@SQL=" & Chr(34) & _
"https://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/" _
& "Mom%27s%20%22Gift%22" & Chr(34) & " like '%pearls%'"
使用 Jet 語法的字串比較
Jet 篩選所支援的字串比較限於全等比對。 您可以根據等同於特定字串的字串屬性值而篩選項目,例如,等於 "Wilson" 的 LastName 屬性。 請注意,比較不區分大小寫,在上一個範例中,指定 "Wilson" 及 "wilson" 做為比較字串,將會傳回相同結果。
使用 DASL 語法的字串比較
DASL 篩選所支援的字串比較包括全等、字首、片語及子字串比對。 請注意,當您篩選 Subject 屬性時,"RE: " 及 "FW: " 此類的字首會被略過。 例如...
sFilter = "[Subject] = 'cat'"
...會同時比對 「cat」 和 「RE: cat」。
全等比對
類似 Jet 篩選,DASL 篩選會使用等於 (=) 運算元執行字串全等比較。 除了上述的字首 "RE: " 及 "FW: " 之外,字串屬性的值必須等同於比較字串。
例如,下列 DASL 查詢會建立公司名稱等於 'Microsoft' 的篩選:
criteria = "@SQL=" & Chr(34) _
& "urn:schemas-microsoft-com:office:office#Company" & Chr(34) _
& " = 'Microsoft'"
另一個範例是,假設您所搜尋的資料夾含有下列主旨的項目:
- 問題
- 有疑問的
- 毫無疑問的
- 回覆:問題
- 重大問題
下列 = 限制...
criteria = "@SQL=" & Chr(34) _
& "urn:schemas:httpmail:subject" & Chr(34) _
& " = 'question'"
...會傳回下列結果:
- 問題
- 回覆:問題
字首、片語及子字串比對
DASL 支援使用內容索引子關鍵字 ci_startswith 及 ci_phrasematch ,以及關鍵字 like ,比對字串屬性中的字首、片語及子字串。 如果儲存區有索引,內容索引子關鍵字的搜尋會比關鍵字 like 更有效率。 如果您的搜尋案例包含子字串比對 (哪些內容索引器關鍵詞不支援) ,請在 DASL 查詢中使用 like 關鍵詞。
DASL 查詢可以含有 ci_startswith 或 ci_phrasematch ,以及 like ,但所有字串比較都會以子字串比對執行。
ci_startswith
ci_startswith 的語 法如下所示...
<PropertySchemaName> ci_startswith <ComparisonString>
...其中 PropertySchemaName 是命名空間所參考之屬性的有效名稱,而 ComparisonString 是用於比較的字串。
ci_startswith 會執行搜尋比對字首。 它使用比較字串中的語彙基元 (字元、單字或多個字),比對具索引屬性字串值中任何單字的前幾個字元。 如果比較字串包含多個令牌,則比較字串中的每個標記在索引屬性中都必須有相符的前置詞。 例如:
- 限制 "sea" 會符合 "search"
- 限制 "sea" 不會符合 "research"
- 限制 "sea" 會符合 "Subject: the deep blue sea"
- 限制 "law order" 會符合 "law and order" 或 "law & order"
- 限制 "law and order" 會符合 "I like the show Law and Order."
- 限制 "law and order" 不會符合 "above the law"
- 限制 "sea creatures" 會符合 "Nova special on sea creatures"
- 限制 "sea creatures" 會符合 "sealife creatures"
- 限制 "sea creatures" 不會符合 "undersea creatures"
使用全等比對中的相同範例,假設您所搜尋的資料夾含有下列主旨的項目:
- 問題
- 有疑問的
- 毫無疑問的
- 回覆:問題
- 重大問題
下列 ci_startswith 限制...
criteria = "@SQL=" & Chr(34) _
& "urn:schemas:httpmail:subject" & Chr(34) _
& " ci_startswith 'question'"
...會傳回下列結果:
- 問題
- 有疑問的
- 回覆:問題
- 重大問題
ci_phrasematch
ci_phrasematch 的語 法如下所示...
<PropertySchemaName> ci_phrasematch <ComparisonString>
...其中 PropertySchemaName 是命名空間所參考之屬性的有效名稱,而 ComparisonString 是用於比較的字串。
ci_phrasematch 會執行搜尋來比對片語。 這在比較字串中會使用語彙基元 (字元、單字或多個字詞),針對索引屬性字串值的全部文字進行比對。 語彙基元是以雙引號或括弧括住。 比較字串中的每個語彙基元都必須有符合的片語,而不是僅有符合的子字串或前置字元。 如果比較字串包含多個令牌,則比較字串中的每個令牌都必須有相符的片語。 多字屬性 (例如 Subject 或 Body ) 中的任何單字都能符合,而不限於第一個單字。 例如:
- 限制 "cat" 會符合 "cat"、"cat box"、"black cat"
- 限制 "cat" 會符合 "re: cat is out"
- 限制 "cat" 不會符合 "catalog", "kittycat"
- 限制 "kitty cat" 會符合 "put the kitty cat out"
- 限制 "kitty cat" 不會符合 "great kitty catalog"
使用全等比對中的相同範例,假設您所搜尋的資料夾含有下列主旨的項目:
- 問題
- 有疑問的
- 毫無疑問的
- 回覆:問題
- 重大問題
下列 ci_phrasematch 限制...
criteria = "@SQL=" & Chr(34) _
& "urn:schemas:httpmail:subject" & Chr(34) _
& " ci_phrasematch 'question'"
...會傳回下列結果:
- 問題
- 回覆:問題
- 重大問題
按讚
like 會執行字首、子字串或全等比對。 視比對類型而定,語彙基元 (字元、單字或多個字) 以 % 字元括住的特定方式會有所不同:
前置詞比對
like '<token>%'
例如,限制...
like 'cat%'
...會比對 「cat」 和 「catalog」。
子字串比對
like '%<token>%'
例如,限制...
like '%cat%'
...會比對 「cat」、“catalog”、“kittycat”、“decathlon”。
等價比對
like '<token>'
例如,限制...
like 'cat'
...會比對 「cat」 和 「RE: Cat」。
每個語彙基元都可以符合字串屬性中單字的任何部分。 如果比較字串含有多個語彙基元,則比較字串中的每個語彙基元都必須有子字串相符項目。 多字屬性如 Subject 或 Body 中的任何單字都能符合,不需要是第一個單字。
使用全等比對中的相同範例,假設您所搜尋的資料夾含有下列主旨的項目:
- 問題
- 有疑問的
- 毫無疑問的
- 回覆:問題
- 重大問題
下列類似限制...
criteria = "@SQL=" & Chr(34) _
& "urn:schemas:httpmail:subject" & Chr(34) _
& " like '%question%'"
...會傳回下列結果:
- 問題
- 有疑問的
- 毫無疑問的
- 回覆:問題
- 重大問題
支援和意見反應
有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應。