Share via


使用字串比較篩選項目

這個主題會說明使用 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_startswithci_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_startswithci_phrasematch ,以及關鍵字 like ,比對字串屬性中的字首、片語及子字串。 如果儲存區有索引,內容索引子關鍵字的搜尋會比關鍵字 like 更有效率。 如果您的搜尋案例包含子字串比對 (哪些內容索引器關鍵詞不支援) ,請在 DASL 查詢中使用 like 關鍵詞。

DASL 查詢可以含有 ci_startswithci_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 會執行搜尋來比對片語。 這在比較字串中會使用語彙基元 (字元、單字或多個字詞),針對索引屬性字串值的全部文字進行比對。 語彙基元是以雙引號或括弧括住。 比較字串中的每個語彙基元都必須有符合的片語,而不是僅有符合的子字串或前置字元。 如果比較字串包含多個令牌,則比較字串中的每個令牌都必須有相符的片語。 多字屬性 (例如 SubjectBody ) 中的任何單字都能符合,而不限於第一個單字。 例如:

  • 限制 "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」。

每個語彙基元都可以符合字串屬性中單字的任何部分。 如果比較字串含有多個語彙基元,則比較字串中的每個語彙基元都必須有子字串相符項目。 多字屬性如 SubjectBody 中的任何單字都能符合,不需要是第一個單字。

使用全等比對中的相同範例,假設您所搜尋的資料夾含有下列主旨的項目:

  • 問題
  • 有疑問的
  • 毫無疑問的
  • 回覆:問題
  • 重大問題

下列類似限制...

criteria = "@SQL=" & Chr(34) _ 
& "urn:schemas:httpmail:subject" & Chr(34) _ 
& " like '%question%'" 

...會傳回下列結果:

  • 問題
  • 有疑問的
  • 毫無疑問的
  • 回覆:問題
  • 重大問題

支援和意見反應

有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應