Поделиться через


Filtering Items Using a String Comparison

В этом разделе описывается поддержка фильтрации по строковом свойству с помощью синтаксиса Microsoft Jet и синтаксиса dav поиска и поиска (DASL).

Разделение строк и использование escape-символов

При сопоставлении строковых свойств можно использовать пару одинарных кавычек (') или пару двойных кавычек ("), чтобы разделить строку, которая является частью фильтра. Например, все следующие строки работают правильно, если свойство имеет тип String:

sFilter = "[CompanyName] = 'Microsoft'"

sFilter = "[CompanyName] = " & Chr(34) & "Microsoft" & Chr(34)

Если при указании фильтра в запросе Jet или DASL используется пара одинарных кавычек для разделения строки, которая является частью фильтра, а строка содержит еще одну кавычку или апостроф, добавьте одну кавычку в качестве escape-символа перед одной кавычками или апострофом. Используйте аналогичный подход, если для разделения строки используется пара двойных кавычек. Если строка содержит двойную кавычку, добавьте двойную кавычку в качестве escape-символа перед двойной кавычками.

Например, в строке фильтра DASL, которая фильтрует свойство Subject , равное слову can't, вся строка фильтра разделяется парой двойных кавычек, а внедренная строка can't разделяется парой одинарных кавычек. В этой строке фильтра необходимо экранировать три символа: начальная двойная кавычка и конечная двойная кавычка для ссылки на https://schemas.microsoft.com/mapi/proptag/0x0037001fсвойство , а также апостроф в условии значения для слова can't.

Применив соответствующие escape-символы, можно выразить строку фильтра следующим образом:

filter = "@SQL=""https://schemas.microsoft.com/mapi/proptag/0x0037001f"" = 'can''t'"

Кроме того, функцию chr(34) можно использовать для представления двойной кавычки (значение символа ASCII — 34), используемой в качестве escape-символа. chr(34) Используя подстановку для escape-символа с двойными кавычками, можно выразить последний пример следующим образом:

filter = "@SQL= " & Chr(34) & "https://schemas.microsoft.com/mapi/proptag/0x0037001f" _
    & Chr(34) & " = " & "'can''t'"

Экранирование символов в одиночных и двойных кавычках также требуется для запросов DASL с операторами ci_startswith или ci_phrasematch . Например, следующий запрос выполняет запрос 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-адрес) в ссылке на свойство следующим образом:

Символ в ссылке на свойство Escape-символ
Символ пробела %20
Двойные кавычки %22
Одинарная кавычка %27

Например, вы используете следующий фильтр для поиска пользовательского свойства с именем Mom's 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, ограничено сопоставлением эквивалентности. Вы можете фильтровать элементы на основе значения строкового свойства, эквивалентного определенной строке, например, свойство LastName равно "Wilson". Обратите внимание, что при сравнении регистр не учитывается; В последнем примере при указании "Wilson" и "wilson" в качестве строки сравнения будут возвращены те же результаты.

Сравнение строк с использованием синтаксиса DASL

Сравнение строк, поддерживаемое фильтрами DASL, включает сопоставление эквивалентности, префикса, фразы и подстроки. Обратите внимание, что при фильтрации по свойству Subject префиксы, такие как "RE:" и "FW: " игнорируются. Например...

sFilter = "[Subject] = 'cat'"

... будет соответствовать как "cat", так и "RE: cat".

Сопоставление эквивалентности

Аналогично фильтрам Jet, фильтры DASL выполняют сравнение эквивалентности строк с помощью оператора equal (=). Значение строкового свойства должно быть эквивалентно строке сравнения, за исключением префиксов RE: и FW: , как упоминалось выше.

Например, следующий запрос DASL создает фильтр для названия компании, равной "Майкрософт":

criteria = "@SQL=" & Chr(34) _
& "urn:schemas-microsoft-com:office:office#Company" & Chr(34) _
& " = 'Microsoft'"

В качестве другого примера предположим, что папка, которую вы ищете, содержит элементы со следующими субъектами:

  • Вопрос
  • Сомнительной
  • Несомненной
  • RE: Вопрос
  • Большой вопрос

Следующий = ограничение...

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

... возвращает следующие результаты:

  • Вопрос
  • RE: Вопрос

Сопоставление префиксов, фраз и подстрок

DASL поддерживает сопоставление префиксов, фраз и подстрок в строковом свойстве с помощью ключевых слов индексатора контента ci_startswith и ci_phrasematch, а также ключевое слово, например. Если хранилище индексировано, поиск по ключевым словам индексатора контента является более эффективным, чем при использовании подобных. Если в сценариях поиска используется сопоставление подстрок (ключевые слова индексатора контента не поддерживаются), используйте в запросе DASL подобный ключевое слово.

Запрос DASL может содержать ci_startswith или ci_phrasematch и т. д., но все сравнения строк будут выполняться как сопоставление подстроки.

ci_startswith

Синтаксис ci_startswith выглядит следующим образом...

<PropertySchemaName> ci_startswith <ComparisonString> 

... где PropertySchemaName — это допустимое имя свойства, на которое ссылается пространство имен, а ComparisonString — строка, используемая для сравнения.

ci_startswith выполняет поиск для сопоставления префиксов. Он использует маркеры (символы, слова или слова) в строке сравнения для сопоставления с первыми несколькими символами любого слова в строковом значении индексированного свойства. Если строка сравнения содержит несколько маркеров, каждый маркер в строке сравнения должен иметь соответствие префикса в индексированных свойствах. Например:

  • Ограничение для "море" будет соответствовать "поиск"
  • Ограничение для "моря" не будет соответствовать "исследования"
  • Ограничение для "море" будет соответствовать "Тема: глубокое синее море"
  • Ограничение для "правопорядку" будет соответствовать "правопорядку" или "право & порядка"
  • Ограничение для "закона и порядка" будет соответствовать "Мне нравится шоу Закон и порядок".
  • Ограничение для "закона и порядка" не будет соответствовать "выше закона"
  • Ограничение для "морских существ" будет соответствовать "Нова специальные на морских существ"
  • Ограничение для "морских существ" будет соответствовать "морские существа"
  • Ограничение для "морских существ" не будет соответствовать "подводным существам"

Используя тот же пример в разделе Сопоставление эквивалентности, предположим, что в папке, в которую выполняется поиск, содержатся элементы со следующими темами:

  • Вопрос
  • Сомнительной
  • Несомненной
  • RE: Вопрос
  • Большой вопрос

Следующее ограничение ci_startswith ...

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

... возвращает следующие результаты:

  • Вопрос
  • Сомнительной
  • RE: Вопрос
  • Большой вопрос

ci_phrasematch

Синтаксис ci_phrasematch выглядит следующим образом...

<PropertySchemaName> ci_phrasematch <ComparisonString> 

... где PropertySchemaName — допустимое имя свойства, на которое ссылается пространство имен, а ComparisonString — строка, используемая для сравнения.

ci_phrasematch выполняет поиск для сопоставления фраз. Он использует маркеры (символы, слова или слова) в строке сравнения, чтобы сопоставить целые слова в строковом значении индексированного свойства. Маркеры заключаются в двойные кавычки или круглые скобки. Каждый токен в строке сравнения должен иметь совпадение фраз, а не подстроку или префикс. Если строка сравнения содержит несколько маркеров, каждый токен в строке сравнения должен иметь совпадение фраз. Любое слово в свойстве нескольких слов, например Subject или Body , может совпадать; это не должно быть первым словом. Например:

  • Ограничение для "cat" будет соответствовать "cat", "cat box", "black cat cat"
  • Ограничение для "cat" будет соответствовать "re: cat is out"
  • Ограничение для "cat" не будет соответствовать "catalog", "kittycat"
  • Ограничение для "кошечка" будет соответствовать "положить кошечку из"
  • Ограничение для "кошечка" не будет соответствовать "большой каталог кошечки"

Используя тот же пример в разделе Сопоставление эквивалентности, предположим, что в папке, в которую выполняется поиск, содержатся элементы со следующими темами:

  • Вопрос
  • Сомнительной
  • Несомненной
  • RE: Вопрос
  • Большой вопрос

Следующее ограничение ci_phrasematch ...

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

... возвращает следующие результаты:

  • Вопрос
  • RE: Вопрос
  • Большой вопрос

как

например , выполняет сопоставление префикса, подстроки или эквивалентности. Маркеры (символы, слово или слово) заключаются в символ % определенным образом в зависимости от типа сопоставления:

сопоставление префиксов

  like '<token>%'

Например, ограничение для...

  like 'cat%'

... будет соответствовать "cat" и "catalog".

Сопоставление подстроки

  like '%<token>%'

Например, ограничение для...

  like '%cat%'

... будет соответствовать "cat", "catalog", "kittycat", "decathlon".

сопоставление эквивалентности

  like '<token>'

Например, ограничение для...

  like 'cat'

... будет соответствовать "cat" и "RE: Cat".

Каждый токен может соответствовать любой части слова в строковом свойстве. Если строка сравнения содержит несколько маркеров, каждый токен в строке сравнения должен иметь совпадение подстроки. Любое слово в свойстве нескольких слов, например Subject или Body , может совпадать; оно не должно быть первым словом.

Используя тот же пример в разделе Сопоставление эквивалентности, предположим, что в папке, в которую выполняется поиск, содержатся элементы со следующими темами:

  • Вопрос
  • Сомнительной
  • Несомненной
  • RE: Вопрос
  • Большой вопрос

Следующее, как ограничение...

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

... возвращает следующие результаты:

  • Вопрос
  • Сомнительной
  • Несомненной
  • RE: Вопрос
  • Большой вопрос

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.