Compartir a través de


Filtrar elementos utilizando una comparación de cadena

En este tema se describe la compatibilidad para filtrar por una propiedad de cadena utilizando la sintaxis Microsoft Jet o DASL (DAV Searching and Locating).

Delimitar cadenas y usar caracteres de escape

Al comparar propiedades de cadena, puede usar un par de comillas simples (') o dobles (") para delimitar una cadena que forma parte del filtro. Por ejemplo, todas las líneas siguientes funcionan correctamente si la propiedad es del tipo String:

sFilter = "[CompanyName] = 'Microsoft'"

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

Al especificar un filtro en una consulta Jet o DASL, si usa un par de comillas simples para delimitar una cadena que forma parte del filtro, y la cadena contiene otra comilla simple o apóstrofo, agregue una comilla simple como carácter de escape antes de la comilla simple o el apóstrofo. Use un enfoque similar si usa un par de comillas dobles para deliminar una cadena. Si la cadena contiene comillas dobles, agregue comillas de este tipo como caracteres de escape antes de ellas.

Por ejemplo, en la cadena de filtro DASL que filtra para que la propiedad Subject sea igual a la palabra can't, toda la cadena de filtro está delimitada por un par de comillas dobles y la cadena can't incrustada está delimitada por un par de comillas simples. Hay tres caracteres que debe escape en esta cadena de filtro: la comilla doble inicial y la comilla doble final para la referencia de propiedad de https://schemas.microsoft.com/mapi/proptag/0x0037001fy el apóstrofo en la condición de valor de la palabra can't.

Al aplicar los caracteres de escape apropiados, puede expresar la cadena del filtro de la siguiente manera:

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

Como alternativa, puede usar la chr(34) función para representar la comilla doble (cuyo valor de carácter ASCII es 34) que se usa como carácter de escape. Al usar la sustitución chr(34) para un carácter de escape de comilla doble, puede expresar el último ejemplo de la siguiente manera:

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

También se requiere escapar caracteres de comilla simple y doble para las consultas DASL con los operadores ci_startswith o ci_phrasematch. Por ejemplo, la siguiente consulta realiza una consulta de coincidencia de frases para can't en el tema del mensaje:

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

Otro ejemplo es una cadena de filtro DASL que filtra para que la propiedad Subject sea igual a las palabras the right stuff, donde la palabra stuff se incluye entre comillas dobles. En este caso, debe escapar las comillas dobles que encierran la palabra de la siguiente manera:

filter = "@SQL=""https://schemas.microsoft.com/mapi/proptag/0x0037001f"" = 'the right ""stuff""'"

Un conjunto diferente de reglas de escape se aplican a una referencia de propiedad para propiedades con nombre que contienen los caracteres de comilla doble, comilla simple y espacio. Si la referencia de propiedad contiene alguno de dichos caracteres, debe usar el Localizador de recursos uniforme (URL) que escapa en la referencia de propiedad de la siguiente manera:

Carácter en referencia de propiedad Carácter de escape
Carácter de espacio %20
Comilla doble %22
Comilla simple %27

Por ejemplo, usaría el siguiente filtro para buscar una propiedad personalizada llamada Mom's "Gift" que contiene la palabra 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%'"

Comparaciones de cadena con la sintaxis Jet

La comparación de cadena compatible con los filtros Jet está limitada a las coincidencias de equivalencia. Puede filtrar los elementos cuyo valor de una propiedad de cadena sea equivalente a una cadena determinada, por ejemplo, cuando se cumpla que la propiedad LastName es igual a "Wilson". Tenga en cuenta que la comparación no distingue entre mayúsculas y minúsculas; en el ejemplo anterior, se obtendrán los mismos resultados si se especifica "Wilson" o "wilson" como cadena de comparación.

Comparaciones de cadena con la sintaxis DASL

La comparación de cadena compatible con los filtros DASL incluyen las coincidencias de equivalencia, prefijos, frases y subcadenas. Tenga en cuenta que cuando se filtra según la propiedad Subject, se omiten algunos prefijos como "Re: " y "Rv: ". Por ejemplo...

sFilter = "[Subject] = 'cat'"

... coincidirá con "cat" y "RE: cat".

Coincidencias de equivalencia

Al igual que los filtros Jet, los filtros DASL efectúan comparaciones de equivalencia de cadenas utilizando el operador igual que (=). El valor de la propiedad de cadena debe ser equivalente a la cadena de comparación, con la excepción de los prefijos "Re: " y "Rv: ", como se ha indicado anteriormente.

A modo de ejemplo, la consulta DASL siguiente crea un filtro que devuelve todas las empresas cuyo nombre sea igual a 'Microsoft':

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

Para otro ejemplo, supongamos que la carpeta donde se realiza la búsqueda contiene elementos con los asuntos siguientes:

  • Question
  • Questionable
  • Unquestionable
  • RE: Question
  • The big question

El siguiente = restricción...

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

... devolverá los siguientes resultados:

  • Pregunta
  • RE: Question

Coincidencias de prefijos, frases y subcadenas

DASL es compatible con las coincidencias de prefijos, frases y subcadenas en una propiedad de cadena utilizando las palabras clave de indizador de contenido ci_startswith y ci_phrasematch, y la palabra clave like. Si el almacén está indizado, la búsqueda con palabras clave de indizador de contenido resulta más eficaz que con like. Si los escenarios de búsqueda incluyen la coincidencia de subcadenas (que las palabras clave del indexador de contenido no admiten), use la palabra clave like en una consulta DASL.

Una consulta DASL puede contener ci_startswith o ci_phrasematch y like, pero todas las comparaciones de cadena se llevarán a cabo como coincidencias de subcadena.

ci_startswith

La sintaxis de ci_startswith es la siguiente...

<PropertySchemaName> ci_startswith <ComparisonString> 

... donde PropertySchemaName es un nombre válido de una propiedad a la que hace referencia el espacio de nombres, y ComparisonString es la cadena utilizada para la comparación.

ci_startswith efectúa una búsqueda para hallar coincidencias de prefijos. Utiliza símbolos (caracteres, una palabra o varias palabras) en la cadena de comparación para compararlos con los primeros caracteres de cualquier palabra del valor de cadena de la propiedad indizada. Si la cadena de comparación contiene varios tokens, cada token de la cadena de comparación debe tener una coincidencia de prefijo en la propiedad indizada. Por ejemplo:

  • La restricción a "var" coincidirá con "variable"
  • La restricción "var" no coincidirá con "invariable"
  • La restricción a "var" coincidirá con "Asunto: Las principales variables"
  • La restricción a "ley orden" coincidiría con "ley y orden" o con "ley + orden"
  • La restricción a "ley y orden" coincidirá con "Me gusta el espectáculo Ley y orden".
  • La restricción a "ley y orden" no coincidirá con "por encima de la ley"
  • La restricción a "fauna marina" coincidirá con "Especial Nova sobre fauna marina"
  • La restricción a "fauna marina" coincidirá con "faunas marinas"
  • La restricción a "fauna marina" no coincidirá con "fauna submarina"

Si utilizamos el mismo ejemplo que para la sección Coincidencias de equivalencia, supongamos que la carpeta donde efectúa la búsqueda contiene elementos con los siguientes asuntos:

  • Question
  • Questionable
  • Unquestionable
  • RE: Question
  • The big question

La siguiente restricción ci_startswith ...

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

... devolverá los siguientes resultados:

  • Pregunta
  • Questionable
  • RE: Question
  • The big question

ci_phrasematch

La sintaxis de ci_phrasematch es la siguiente...

<PropertySchemaName> ci_phrasematch <ComparisonString> 

... donde PropertySchemaName es un nombre válido de una propiedad a la que hace referencia el espacio de nombres y ComparisonString es la cadena utilizada para la comparación.

ci_phrasematch efectúa una búsqueda para hallar coincidencias de frases. Usa símbolos (caracteres, una palabra o varias) en la cadena de comparación para hallar coincidencias de la palabra completa en el valor de cadena de la propiedad indizada. Los símbolos (tokens) se incluyen entre paréntesis o entre comillas. Cada símbolo (token) de la cadena de comparación debe tener una coincidencia de frases, no de subcadena ni de prefijo. Si la cadena de comparación contiene varios tokens, cada token de la cadena de comparación debe tener una coincidencia de frase. Cualquier palabra de una propiedad de varias palabras, como Subject o Body, podrá coincidir; no es imprescindible que sea la primera palabra. Por ejemplo:

  • La restricción a "gato" coincidirá con "gato", "gato negro", "gran gato"
  • La restricción a "gato" coincidirá con "Re: el gato ha salido"
  • La restricción a "gato" no coincidirá con "maragato", "gatopardo"
  • La restricción a "pequeño gato" coincidirá con "saca al pequeño gato"
  • La restricción a "pequeño gato" no coincidirá con "el pequeño gatopardo"

Si utilizamos el mismo ejemplo que para la sección Coincidencias de equivalencia, supongamos que la carpeta donde efectúa la búsqueda contiene elementos con los siguientes asuntos:

  • Question
  • Questionable
  • Unquestionable
  • RE: Question
  • The big question

La siguiente restricción ci_phrasematch ...

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

... devolverá los siguientes resultados:

  • Pregunta
  • RE: Question
  • The big question

como

like halla coincidencias de prefijo, subcadena o equivalencia. Los símbolos (caracteres, una o varias palabras) se incluyen entre caracteres % de forma distinta según el tipo de coincidencia:

coincidencia de prefijos

  like '<token>%'

Por ejemplo, restringir para...

  like 'cat%'

... coincidiría con "cat" y "catalog".

coincidencia de subcadenas

  like '%<token>%'

Por ejemplo, restringir para...

  like '%cat%'

... coincidiría con "cat", "catalog", "kittycat", "decathlon".

coincidencia de equivalencia

  like '<token>'

Por ejemplo, restringir para...

  like 'cat'

... coincidiría con "cat" y "RE: Cat".

Cada símbolo puede coincidir con cualquier parte de una palabra de la propiedad de cadena. Si la cadena de comparación contiene varios símbolos, cada uno de ellos deberá tener una coincidencia de subcadena. Cualquier palabra de una propiedad de varias palabras, como Subject o Body podrá coincidir; no es imprescindible que sea la primera palabra.

Si utilizamos el mismo ejemplo que para la sección Coincidencias de equivalencia, supongamos que la carpeta donde efectúa la búsqueda contiene elementos con los siguientes asuntos:

  • Question
  • Questionable
  • Unquestionable
  • RE: Question
  • The big question

Lo siguiente, como restricción...

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

... devolverá los siguientes resultados:

  • Pregunta
  • Questionable
  • Unquestionable
  • RE: Question
  • The big question

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.