CONTAINS (Transact-SQL)CONTAINS (Transact-SQL)

SE APLICA A: síSQL Server (a partir de 2008) síAzure SQL Database noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Busca coincidencias precisas o aproximadas (menos precisas) de palabras o frases, palabras que se encuentran a cierta distancia de otra o coincidencias ponderadas en SQL ServerSQL Server.Searches for precise or fuzzy (less precise) matches to single words and phrases, words within a certain distance of one another, or weighted matches in SQL ServerSQL Server. CONTAINS es un predicado que se usa en la cláusula WHERE de una instrucción SELECT de Transact-SQLTransact-SQL para realizar una búsqueda de texto completo de SQL ServerSQL Server en las columnas indizadas de texto completo que contienen tipos de datos basados en caracteres.CONTAINS is a predicate used in the WHERE clause of a Transact-SQLTransact-SQL SELECT statement to perform SQL ServerSQL Server full-text search on full-text indexed columns containing character-based data types.

CONTAINS puede buscar:CONTAINS can search for:

  • Una palabra o una frase.A word or phrase.

  • El prefijo de una palabra o una frase.The prefix of a word or phrase.

  • Una palabra cerca de otra palabra.A word near another word.

  • Una palabra que sea una inflexión de otra (por ejemplo, las palabras controles, controladores, controlando y controlado son inflexiones de control).A word inflectionally generated from another (for example, the word drive is the inflectional stem of drives, drove, driving, and driven).

  • Una palabra que sea un sinónimo de otra mediante un diccionario de sinónimos (por ejemplo, la palabra "metal" puede tener sinónimos como "aluminio" y "acero").A word that is a synonym of another word using a thesaurus (for example, the word "metal" can have synonyms such as "aluminum" and "steel").

Para obtener información sobre las formas de búsqueda de texto completo que se admiten en SQL ServerSQL Server, vea Consulta con búsqueda de texto completo.For information about the forms of full-text searches that are supported by SQL ServerSQL Server, see Query with Full-Text Search.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

CONTAINS (   
     {   
        column_name | ( column_list )   
      | *   
      | PROPERTY ( { column_name }, 'property_name' )    
     }   
     , '<contains_search_condition>'  
     [ , LANGUAGE language_term ]  
   )   
  
<contains_search_condition> ::=   
  {   
      <simple_term>   
    | <prefix_term>   
    | <generation_term>   
    | <generic_proximity_term>   
    | <custom_proximity_term>   
    | <weighted_term>   
    }   
  |   
    { ( <contains_search_condition> )   
        [ { <AND> | <AND NOT> | <OR> } ]   
        <contains_search_condition> [ ...n ]   
  }   
<simple_term> ::=   
     { word | "phrase" }  
  
<prefix term> ::=   
  { "word*" | "phrase*" }  
  
<generation_term> ::=   
  FORMSOF ( { INFLECTIONAL | THESAURUS } , <simple_term> [ ,...n ] )   
  
<generic_proximity_term> ::=   
  { <simple_term> | <prefix_term> } { { { NEAR | ~ }   
     { <simple_term> | <prefix_term> } } [ ...n ] }  
  
<custom_proximity_term> ::=   
  NEAR (   
     {  
        { <simple_term> | <prefix_term> } [ ,...n ]  
     |  
        ( { <simple_term> | <prefix_term> } [ ,...n ] )   
      [, <maximum_distance> [, <match_order> ] ]  
     }  
       )   
  
      <maximum_distance> ::= { integer | MAX }  
      <match_order> ::= { TRUE | FALSE }   
  
<weighted_term> ::=   
  ISABOUT   
   ( {   
        {   
          <simple_term>   
        | <prefix_term>   
        | <generation_term>   
        | <proximity_term>   
        }   
      [ WEIGHT ( weight_value ) ]   
      } [ ,...n ]   
   )   
  
<AND> ::=   
  { AND | & }  
  
<AND NOT> ::=   
  { AND NOT | &! }  
  
<OR> ::=   
  { OR | | }  
  

ArgumentosArguments

column_namecolumn_name
Es el nombre de una columna indizada de texto completo de la tabla especificada en la cláusula FROM.Is the name of a full-text indexed column of the table specified in the FROM clause. Las columnas pueden ser de tipo char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary o varbinary(max).The columns can be of type char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary, or varbinary(max).

lista_de_columnascolumn_list
Especifica dos o más columnas, separadas por comas.Specifies two or more columns, separated by commas. column_list debe ir entre paréntesis.column_list must be enclosed in parentheses. A menos que se especifique language_term, el idioma de todas las columnas de column_list debe ser el mismo.Unless language_term is specified, the language of all columns of column_list must be the same.

*
Especifica que la consulta busca la condición de búsqueda especificada en todas las columnas indizadas de texto completo de la tabla especificada en la cláusula FROM.Specifies that the query searches all full-text indexed columns in the table specified in the FROM clause for the given search condition. Las columnas de la cláusula CONTAINS deben proceder de una tabla única que tenga un índice de texto completo.The columns in the CONTAINS clause must come from a single table that has a full-text index. A menos que se especifique language_term, el idioma de todas las columnas de la tabla debe ser el mismo.Unless language_term is specified, the language of all columns of the table must be the same.

PROPERTY ( column_name, 'property_name')PROPERTY ( column_name , 'property_name')
Se aplica a: desde SQL Server 2012 (11.x)SQL Server 2012 (11.x) hasta SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

Especifica la propiedad de un documento por la que buscar la condición de búsqueda especificada.Specifies a document property on which to search for the specified search condition.

Importante

Para que la consulta devuelva alguna fila, property_name se debe especificar en la lista de propiedades de búsqueda del índice de texto completo y el índice de texto completo debe contener entradas específicas de la propiedad property_name.For the query to return any rows, property_name must be specified in the search property list of the full-text index and the full-text index must contain property-specific entries for property_name. Para obtener más información, vea Buscar propiedades de documento con listas de propiedades de búsqueda.For more information, see Search Document Properties with Search Property Lists.

LANGUAGE language_termLANGUAGE language_term
Es el idioma que se usará para la separación de palabras, la lematización, las expansiones y reemplazos del diccionario de sinónimos y la eliminación de palabras irrelevantes como parte de la consulta.Is the language to use for word breaking, stemming, thesaurus expansions and replacements, and noise-word (or stopword) removal as part of the query. Este parámetro es opcional.This parameter is optional.

Si se almacenan juntos documentos de idiomas diferentes como objetos binarios (BLOB) en una sola columna, el identificador de configuración regional (LCID) de un documento determinado determina qué idioma se usa para indizar su contenido.If documents of different languages are stored together as binary large objects (BLOBs) in a single column, the locale identifier (LCID) of a given document determines what language to use to index its content. Al consultar este tipo de columna, especificar LANGUAGE language_term puede aumentar la probabilidad de encontrar una coincidencia acertada.When querying such a column, specifying LANGUAGE language_term can increase the probability of a good match.

language_term se puede especificar como una cadena, un entero o un valor hexadecimal correspondiente al identificador de configuración regional (LCID) de un idioma.language_term can be specified as a string, integer, or hexadecimal value corresponding to the LCID of a language. Si se especifica language_term, el idioma que representa se aplica a todos los elementos de la condición de búsqueda.If language_term is specified, the language it represents is applied to all elements of the search condition. Si no se especifica ningún valor, se utiliza el idioma de texto completo de la columna.If no value is specified, the column full-text language is used.

Cuando se especifica como una cadena, language_term corresponde al valor de columna alias de la vista de compatibilidad sys.syslanguages (Transact-SQL).When specified as a string, language_term corresponds to the alias column value in the sys.syslanguages (Transact-SQL) compatibility view. La cadena debe estar delimitada con comillas sencillas, como en 'language_term'.The string must be enclosed in single quotation marks, as in 'language_term'. Cuando se especifica como un entero, language_term es el LCID real que identifica el idioma.When specified as an integer, language_term is the actual LCID that identifies the language. Cuando se especifica como un valor hexadecimal, language_term es 0x seguido del valor hexadecimal del LCID.When specified as a hexadecimal value, language_term is 0x followed by the hexadecimal value of the LCID. El valor hexadecimal no puede superar los ocho dígitos, incluidos los ceros a la izquierda.The hexadecimal value must not exceed eight digits, including leading zeros.

Si el valor está en formato de juego de caracteres de doble byte (DBCS), SQL ServerSQL Server lo convertirá a Unicode.If the value is in double-byte character set (DBCS) format, SQL ServerSQL Server converts it to Unicode.

Si el idioma especificado no es válido o no hay recursos instalados que se correspondan con dicho idioma, SQL ServerSQL Server devuelve un error.If the language specified is not valid or there are no resources installed that correspond to that language, SQL ServerSQL Server returns an error. Para usar recursos de idioma neutro, especifique 0x0 como language_term.To use the neutral language resources, specify 0x0 as language_term.

<contains_search_condition><contains_search_condition>
Especifica el texto que se va a buscar en column_name y las condiciones para obtener coincidencias.Specifies the text to search for in column_name and the conditions for a match.

<contains_search_condition> es nvarchar.<contains_search_condition> is nvarchar. Se realiza una conversión implícita cuando se usa otro tipo de datos de carácter como entrada.An implicit conversion occurs when another character data type is used as input. No se pueden usar los tipos de datos de cadena grande varchar(max) y nvarchar(max).Large string data types nvarchar(max) and varchar(max) cannot be used. En el siguiente ejemplo, la variable @SearchWord, definida como una variable de tipo varchar(30), provoca una conversión implícita en el predicado CONTAINS.In the following example, the @SearchWord variable, which is defined as varchar(30), causes an implicit conversion in the CONTAINS predicate.

USE AdventureWorks2012;  
GO  
DECLARE @SearchWord varchar(30)  
SET @SearchWord ='performance'  
SELECT Description   
FROM Production.ProductDescription   
WHERE CONTAINS(Description, @SearchWord);  

Como el "examen de parámetros" no funciona con la conversión, use nvarchar para lograr un mejor rendimiento.Because "parameter sniffing" does not work across conversion, use nvarchar for better performance. En el ejemplo, declare @SearchWord como nvarchar(30).In the example, declare @SearchWord as nvarchar(30).

USE AdventureWorks2012;  
GO  
DECLARE @SearchWord nvarchar(30)  
SET @SearchWord = N'performance'  
SELECT Description   
FROM Production.ProductDescription   
WHERE CONTAINS(Description, @SearchWord);  

También puede usar la sugerencia de consulta OPTIMIZE FOR para los casos en los que se genera un plan poco óptimo.You can also use the OPTIMIZE FOR query hint for cases in which a non optimal plan is generated.

wordword
Es una cadena de caracteres sin espacios ni signos de puntuación.Is a string of characters without spaces or punctuation.

phrasephrase
Es una o varias palabras con espacios entre cada una de ellas.Is one or more words with spaces between each word.

Nota

Algunos idiomas, como los de algunas partes de Asia, pueden tener frases que contengan una o varias palabras sin espacios entre ellas.Some languages, such as those written in some parts of Asia, can have phrases that consist of one or more words without spaces between them.

<simple_term><simple_term>
Especifica una coincidencia para una palabra o frase exactas.Specifies a match for an exact word or a phrase. Ejemplos de términos simples válidos son "blue berry", blueberry y "Microsoft SQL Server".Examples of valid simple terms are "blue berry", blueberry, and "Microsoft SQL Server". Las frases tienen que ir entre comillas dobles ("").Phrases should be enclosed in double quotation marks (""). Las palabras de una frase tienen que aparecer en la columna de la base de datos en el mismo orden que el especificado en <contains_search_condition>.Words in a phrase must appear in the same order as specified in <contains_search_condition> as they appear in the database column. La búsqueda de caracteres en la palabra o la frase no distingue mayúsculas de minúsculas.The search for characters in the word or phrase is not case-sensitive. Las palabras irrelevantes (como un, y, el o la) de las columnas indizadas de texto completo no se almacenan en el índice de texto completo.Noise words (or stopwords) (such as a, and, or the) in full-text indexed columns are not stored in the full-text index. Si se utiliza una palabra irrelevante en la búsqueda de una sola palabra, SQL ServerSQL Server devuelve un mensaje de error que indica que la consulta contiene solo palabras irrelevantes.If a noise word is used in a single word search, SQL ServerSQL Server returns an error message indicating that the query contains only noise words. SQL ServerSQL Server incluye una lista estándar de palabras irrelevantes en el directorio \Mssql\Binn\FTERef de cada instancia de SQL ServerSQL Server.includes a standard list of noise words in the directory \Mssql\Binn\FTERef of each instance of SQL ServerSQL Server.

Los signos de puntuación se omiten.Punctuation is ignored. Por lo tanto, CONTAINS(testing, "computer failure") coincide con una fila que contiene el valor "Where is my computer?Therefore, CONTAINS(testing, "computer failure") matches a row with the value, "Where is my computer? Failure to find it would be expensive".Failure to find it would be expensive." Para más información sobre el comportamiento de los separadores de palabras, vea Configurar y administrar separadores de palabras y lematizadores para la búsqueda.For more information on word-breaker behavior, see Configure and Manage Word Breakers and Stemmers for Search.

<prefix_term><prefix_term>
Especifica la coincidencia de palabras o frases que comiencen con el texto especificado.Specifies a match of words or phrases beginning with the specified text. Incluya un término prefijo entre comillas dobles ("") y agregue un asterisco (*) delante de las comillas de cierre, de modo que se haga coincidir con cualquier texto que comience con el término sencillo especificado antes del asterisco.Enclose a prefix term in double quotation marks ("") and add an asterisk (*) before the ending quotation mark, so that all text starting with the simple term specified before the asterisk is matched. La cláusula debe especificarse de esta manera:CONTAINS (column, '"text*"').The clause should be specified this way: CONTAINS (column, '"text*"'). El asterisco representa cero, uno o más caracteres (de la palabra raíz o de las palabras de la palabra o la frase).The asterisk matches zero, one, or more characters (of the root word or words in the word or phrase). Si el texto y el asterisco no se delimitan con comillas dobles de modo que el predicado sea CONTAINS (column, 'text*'), la búsqueda de texto completo considera el asterisco un carácter y busca coincidencias exactas con text*.If the text and asterisk are not delimited by double quotation marks, so the predicate reads CONTAINS (column, 'text*'), full-text search considers the asterisk as a character and searches for exact matches to text*. El motor de texto completo no encontrará palabras con el carácter de asterisco (*) porque los separadores de palabras suelen omitir dichos caracteres.The full-text engine will not find words with the asterisk (*) character because word breakers typically ignore such characters.

Cuando <prefix_term> es una frase, todas las palabras de dicha frase se consideran prefijos.When <prefix_term> is a phrase, each word contained in the phrase is considered to be a separate prefix. Por tanto, una consulta que especifique el prefijo "local wine*" hace que se devuelvan todas las filas que contengan el texto "local winery", "locally wined and dined", etc.Therefore, a query specifying a prefix term of "local wine*" matches any rows with the text of "local winery", "locally wined and dined", and so on.

<generation_term><generation_term>
Especifica la coincidencia de palabras cuando los términos simples incluyen variaciones de la palabra original que se busca.Specifies a match of words when the included simple terms include variants of the original word for which to search.

INFLECTIONALINFLECTIONAL
Especifica que se va a utilizar el analizador lingüístico dependiente del idioma en el término simple especificado.Specifies that the language-dependent stemmer is to be used on the specified simple term. El comportamiento del analizador lingüístico se define en función de las reglas de análisis lingüístico de cada idioma concreto.Stemmer behavior is defined based on stemming rules of each specific language. El idioma neutro no tiene ningún analizador lingüístico asociado.The neutral language does not have an associated stemmer. El idioma de las columnas que se van a consultar se utiliza para hacer referencia al analizador lingüístico deseado.The column language of the columns being queried is used to refer to the desired stemmer. Si se especifica language_term, se usa el analizador lingüístico correspondiente a dicho idioma.If language_term is specified, the stemmer corresponding to that language is used.

Un <simple_term> determinado dentro de un <generation_term> no coincidirá con nombres y verbos.A given <simple_term> within a <generation_term> will not match both nouns and verbs.

THESAURUSTHESAURUS
Especifica que se utiliza el diccionario de sinónimos correspondiente al idioma de texto completo de la columna o el idioma especificado en la consulta.Specifies that the thesaurus corresponding to the column full-text language, or the language specified in the query is used. El patrón o patrones más largos de <simple_term> se hacen coincidir con el diccionario de sinónimos y se generan términos adicionales para expandir o reemplazar el patrón original.The longest pattern or patterns from the <simple_term> are matched against the thesaurus and additional terms are generated to expand or replace the original pattern. Si no se encuentra ninguna coincidencia para todo o parte de <simple_term>, la parte no coincidente se trata como un simple_term.If a match is not found for all or part of the <simple_term>, the non-matching portion is treated as a simple_term. Para más información sobre los sinónimos de búsqueda de texto completo, vea Configurar y administrar archivos de sinónimos para búsquedas de texto completo.For more information on the full-text search thesaurus, see Configure and Manage Thesaurus Files for Full-Text Search.

<generic_proximity_term><generic_proximity_term>
Especifica una coincidencia de palabras o frases que deben estar en el documento en el que se busca.Specifies a match of words or phrases that must be in the document that is being searched.

Importante

Esta característica está en modo de mantenimiento y es posible que no se incluya en una versión futura de Microsoft SQL Server.This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Se recomienda usar <custom_proximity_term>.We recommend that you use <custom_proximity_term>.

NEAR | ~NEAR | ~
Indica que la palabra o frase de cada lado del operador NEAR o ~ debe aparecer en un documento para que se devuelva una coincidencia.Indicates that the word or phrase on each side of the NEAR or ~ operator must occur in a document for a match to be returned. Debe especificar dos términos de búsqueda.You must specify two search terms. Un término de búsqueda determinado puede ser una sola palabra o una frase delimitada por comillas dobles ("phrase").A given search term can be either a single word or a phrase that is delimited by double quotation marks ("phrase").

Se pueden encadenar varias condiciones de proximidad, como en a NEAR b NEAR c o a ~ b ~ c.Several proximity terms can be chained, as in a NEAR b NEAR c or a ~ b ~ c. Las condiciones de proximidad encadenadas deben estar todas en el documento para que se devuelva una coincidencia.Chained proximity terms must all be in the document for a match to be returned.

Por ejemplo, CONTAINS(*column_name*, 'fox NEAR chicken') y CONTAINSTABLE(*table_name*, *column_name*, 'fox ~ chicken') devolverían ambos cualquier documento de la columna especificada que contuviera "fox" y "chicken".For example, CONTAINS(*column_name*, 'fox NEAR chicken') and CONTAINSTABLE(*table_name*, *column_name*, 'fox ~ chicken') would both return any documents in the specified column that contain both "fox" and "chicken". Además, CONTAINSTABLE devuelve un rango para cada documento según la proximidad de "zorro" y "pollo".In addition, CONTAINSTABLE returns a rank for each document based on the proximity of "fox" and "chicken". Por ejemplo, si un documento contiene la frase "The fox ate the chicken", su clasificación sería alta porque los términos se encuentran más próximos que en otros documentos.For example, if a document contains the sentence, "The fox ate the chicken," its ranking would be high because the terms are closer to one another than in other documents.

Para más información sobre los términos de proximidad genéricos, vea Buscar palabras cerca de otra palabra con NEAR.For more information about generic proximity terms, see Search for Words Close to Another Word with NEAR.

<custom_proximity_term><custom_proximity_term>
Se aplica a: desde SQL Server 2012 (11.x)SQL Server 2012 (11.x) hasta SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

Especifica una coincidencia entre palabras o frases y, opcionalmente, la distancia máxima permitida entre los términos de búsqueda.Specifies a match of words or phrases, and optionally, the maximum distance allowed between search terms. También se puede especificar que los términos de búsqueda deben estar en el orden exacto en que se indican (<match_order>).you can also specify that search terms must be found in the exact order in which you specify them (<match_order>).

Un término de búsqueda determinado puede ser una sola palabra o una frase delimitada por comillas dobles ("phrase").A given search term can be either a single word or a phrase that is delimited by double quotation marks ("phrase"). Todos los términos especificados deben estar en el documento para que se devuelva una coincidencia.Every specified term must be in the document for a match to be returned. Debe especificar dos términos de búsqueda como mínimo.You must specify at least two search terms. El número máximo de términos de búsqueda es 64.The maximum number of search terms is 64.

De forma predeterminada, el término de proximidad personalizado devuelve todas las filas que contengan los términos especificados, independientemente de la distancia a la que se encuentren y su orden.By default, the custom proximity term returns any rows that contain the specified terms regardless of the intervening distance and regardless of their order. Por ejemplo, en el caso de la siguiente consulta, un documento tendría que contener term1 y "term3 term4" en cualquier parte y en cualquier orden:For example, to match the following query, a document would simply need to contain term1 and "term3 term4" anywhere, in any order:

CONTAINS(column_name, 'NEAR(term1,"term3 term4")')  

Los parámetros opcionales son los siguientes:The optional parameters are as follows:

<maximum_distance><maximum_distance>
Especifica la distancia máxima permitida entre los términos de búsqueda inicial y final de una cadena para que la cadena se considere una coincidencia.Specifies the maximum distance allowed between the search terms at the start and end of a string in order for that string to qualify as a match.

integerinteger
Especifica un entero positivo de 0 a 4294967295.Specifies a positive integer from 0 to 4294967295. Este valor controla el número de términos que no son de búsqueda que puede haber entre los términos primero y último, excluyendo cualquier otro término de búsqueda especificado.This value controls how many non-search terms can occur between the first and last search terms, excluding any additional specified search terms.

Por ejemplo, la siguiente consulta busca AA y BB, en cualquier orden, dentro de una distancia máxima de cinco.For example, the following query searches for AA and BB, in either order, within a maximum distance of five.

CONTAINS(column_name, 'NEAR((AA,BB),5)')  

La cadena AA one two three four five BB se consideraría una coincidencia.The string AA one two three four five BB would be a match. En el siguiente ejemplo, la consulta especifica tres términos de búsqueda (AA, BB y CC) con una distancia máxima de cinco:In the following example, the query specifies for three search terms, AA, BB, and CC within a maximum distance of five:

CONTAINS(column_name, 'NEAR((AA,BB,CC),5)')  

Esta consulta consideraría como coincidencia la siguiente cadena, en la que la distancia total es cinco:This query would match the following string, in which the total distance is five:

BB one two CC three four five A A

Observe que no se cuenta el término de búsqueda interno, CC.Notice that the inner search term, CC, is not counted.

MAXMAX
Devuelve todas las filas que contengan los términos especificados sin tener en cuenta la distancia a la que se encuentran.Returns any rows that contain the specified terms regardless of the distance between them. Ésta es la opción predeterminada.This is the default.

<match_order><match_order>
Especifica si los términos deben encontrarse en el orden especificado para que los devuelva una consulta de búsqueda.Specifies whether the terms must occur in the specified order to be returned by a search query. Para especificar <match_order>, también debe especificar <maximum_distance>.To specify <match_order>, you must also specify <maximum_distance>.

<match_order> puede tener uno de los siguientes valores:<match_order> takes one of the following values:

TRUETRUE
Exige que los términos estén en el orden especificado.Enforces the specified order within terms. Por ejemplo, NEAR(A,B) solo consideraría como coincidencia A ... B.For example, NEAR(A,B) would match only A ... B.

FALSEFALSE
No tiene en cuenta el orden especificado.Ignores the specified order. Por ejemplo, NEAR(A,B) consideraría como coincidencias A ... B y B ... A.For example, NEAR(A,B) would match both A ... B and B ... A.

Ésta es la opción predeterminada.This is the default.

Por ejemplo, el siguiente término de proximidad busca las palabras "Monday", "Tuesday" y "Wednesday" en el orden especificado, sin tener en cuenta la distancia a la que se encuentren:For example, the following proximity term searches the words "Monday", "Tuesday", and "Wednesday" in the specified order with regardless of the distance between them:

CONTAINS(column_name, 'NEAR ((Monday, Tuesday, Wednesday), MAX, TRUE)')  

Para más información sobre el uso de términos de proximidad personalizados, vea Buscar palabras cerca de otra palabra con NEAR.For more information about using custom proximity terms, see Search for Words Close to Another Word with NEAR.

<weighted_term><weighted_term>
Especifica que las filas coincidentes (devueltas por la consulta) coinciden con una lista de palabras y frases a las que se asigna opcionalmente un valor ponderado.Specifies that the matching rows (returned by the query) match a list of words and phrases, each optionally given a weighting value.

ISABOUTISABOUT
Especifica la palabra clave <weighted_term>.Specifies the <weighted_term> keyword.

WEIGHT(weight_value)WEIGHT(weight_value)
Especifica el valor de ponderación como un número entre 0,0 y 1,0.Specifies a weight value, which is a number from 0.0 through 1.0. Cada componente de <weighted_term> puede incluir un weight_value.Each component in <weighted_term> may include a weight_value. weight_value es una forma de modificar cómo varias partes de una consulta afectan al valor de rango asignado a cada fila que coincide con la consulta.weight_value is a way to change how various portions of a query affect the rank value assigned to each row matching the query. WEIGHT no influye en los resultados de las consultas CONTAINS, pero sí en el rango de las consultas CONTAINSTABLE.WEIGHT does not affect the results of CONTAINS queries, but WEIGHT impacts rank in CONTAINSTABLE queries.

Nota

El separador decimal siempre es un punto, independientemente de la configuración regional del sistema operativo.The decimal separator is always a period, regardless of the operating system locale.

{ AND | & } | { AND NOT | &!{ AND | & } | { AND NOT | &! } | { OR | | } } | { OR | | }
Especifica una operación lógica entre dos condiciones de búsqueda.Specifies a logical operation between two contains search conditions.

{ AND | & }{ AND | & }
Indica que en ambos casos se incluyen condiciones de búsqueda que se deben cumplir para encontrar coincidencias.Indicates that the two contains search conditions must be met for a match. Se puede utilizar el símbolo de "y" comercial (&) en lugar de la palabra clave AND para representar el operador AND.The ampersand symbol (&) may be used instead of the AND keyword to represent the AND operator.

{ AND NOT | &!{ AND NOT | &! }}
Indica que la segunda condición de búsqueda no puede estar presente para encontrar coincidencias.Indicates that the second search condition must not be present for a match. Se puede utilizar el símbolo de "y" comercial seguido del signo de admiración (&!) en lugar de la palabra clave AND NOT para representar el operador AND NOT.The ampersand followed by the exclamation mark symbol (&!) may be used instead of the AND NOT keyword to represent the AND NOT operator.

{ OR | | }{ OR | | }
Indica que en uno de los dos casos se incluyen condiciones de búsqueda que se deben cumplir para encontrar coincidencias.Indicates that either of the two contains search conditions must be met for a match. Se puede utilizar el símbolo de barra (|) en lugar de la palabra clave OR para representar el operador OR.The bar symbol (|) may be used instead of the OR keyword to represent the OR operator.

Cuando <contains_search_condition> contiene grupos entre paréntesis, estos se evalúan primero.When <contains_search_condition> contains parenthesized groups, these parenthesized groups are evaluated first. Después de evaluar los grupos entre paréntesis, se aplican las reglas siguientes cuando se utilizan estos operadores lógicos con condiciones de búsqueda:After evaluating parenthesized groups, these rules apply when using these logical operators with contains search conditions:

  • NOT se aplica antes que AND.NOT is applied before AND.

  • NOT solo puede estar a continuación de AND, como en AND NOT.NOT can only occur after AND, as in AND NOT. No se acepta el operador OR NOT.The OR NOT operator is not allowed. NOT no se puede especificar antes del primer término.NOT cannot be specified before the first term. Por ejemplo, CONTAINS (mycolumn, 'NOT "phrase_to_search_for" ' ) no es válido.For example, CONTAINS (mycolumn, 'NOT "phrase_to_search_for" ' ) is not valid.

  • AND se aplica antes que OR.AND is applied before OR.

  • Los operadores booleanos del mismo tipo (AND, OR) son asociativos y, por tanto, se pueden aplicar en cualquier orden.Boolean operators of the same type (AND, OR) are associative and can therefore be applied in any order.

nn
Es un marcador de posición que indica que se pueden especificar varias condiciones de búsqueda de CONTAINS y términos dentro de ellas.Is a placeholder indicating that multiple CONTAINS search conditions and terms within them can be specified.

Notas generalesGeneral Remarks

Los predicados y las funciones de texto completo operan en una única tabla, que se obtiene del predicado FROM.Full-text predicates and functions work on a single table, which is implied in the FROM predicate. Para buscar en varias tablas, utilice una tabla combinada en la cláusula FROM a fin de buscar en un conjunto de resultados que sea el producto de dos o más tablas.To search on multiple tables, use a joined table in your FROM clause to search on a result set that is the product of two or more tables.

Los predicados de texto completo no se pueden usar en la cláusula OUTPUT cuando el nivel de compatibilidad de la base de datos está establecido en 100.Full-text predicates are not allowed in the OUTPUT clause when the database compatibility level is set to 100.

Consultar servidores remotosQuerying Remote Servers

Se puede usar un nombre de cuatro partes en el predicado CONTAINS o FREETEXT para consultar columnas indizadas de texto completo de las tablas de destino en un servidor vinculado.You can use a four-part name in the CONTAINS or FREETEXT predicate to query full-text indexed columns of the target tables on a linked server. Para preparar un servidor remoto para recibir consultas de texto completo, es necesario crear un índice de texto completo en las tablas y columnas de destino en el servidor remoto y, posteriormente, agregar el servidor remoto como un servidor vinculado.To prepare a remote server to receive full-text queries, create a full-text index on the target tables and columns on the remote server and then add the remote server as a linked server.

A diferencia de la búsqueda de texto completo, el predicado LIKE de Transact-SQLTransact-SQL funciona solamente en patrones de caracteres.In contrast to full-text search, the LIKETransact-SQLTransact-SQL predicate works on character patterns only. Además, no es posible utilizar el predicado de LIKE para consultar datos binarios con formato.Also, you cannot use the LIKE predicate to query formatted binary data. Por otro lado, una consulta LIKE contra una cantidad grande de datos de texto no estructurados es mucho más lenta que una consulta de texto completo equivalente contra los mismos datos.Furthermore, a LIKE query against a large amount of unstructured text data is much slower than an equivalent full-text query against the same data. Una consulta LIKE realizada en millones de filas de datos de texto puede tardar minutos en devolver resultados, mientras que una consulta de texto completo en los mismos datos puede tardar únicamente segundos, en función del número de filas que se devuelvan y su tamaño.A LIKE query against millions of rows of text data can take minutes to return; whereas a full-text query can take only seconds or less against the same data, depending on the number of rows that are returned and their size. También hay que tener en cuenta que LIKE realiza solo un análisis de patrón simple de toda una tabla.Another consideration is that LIKE performs only a simple pattern scan of an entire table. Por el contrario, una consulta de texto completo reconoce el lenguaje y aplica transformaciones concretas al realizar el índice y la consulta. Por ejemplo, filtra las palabras irrelevantes y amplía el diccionario de sinónimos y las inflexiones.A full-text query, in contrast, is language aware, applying specific transformations at index and query time, such as filtering stopwords and making thesaurus and inflectional expansions. Estas transformaciones contribuyen a mejorar los resultados de las consultas de texto completo y su orden final.These transformations help full-text queries improve their recall and the final ranking of their results.

Puede consultar varias columnas especificando una lista de columnas en las que realizar la búsqueda.You can query multiple columns by specifying a list of columns to search. Las columnas deben ser de la misma tabla.The columns must be from the same table.

Por ejemplo, la siguiente consulta CONTAINS busca el término Red en las columnas Name y Color de la tabla Production.Product de la base de datos de ejemplo AdventureWorks2012AdventureWorks2012.For example, the following CONTAINS query searches for the term Red in the Name and Color columns of the Production.Product table of the AdventureWorks2012AdventureWorks2012 sample database.

Use AdventureWorks2012;  
GO  
SELECT Name, Color   
FROM Production.Product  
WHERE CONTAINS((Name, Color), 'Red');  

EjemplosExamples

A.A. Usar CONTAINS con <simple_term>Using CONTAINS with <simple_term>

En este ejemplo se buscan todos los productos con un precio de $80.99 que contengan la palabra Mountain.The following example finds all products with a price of $80.99 that contain the word Mountain.

USE AdventureWorks2012;  
GO  
SELECT Name, ListPrice  
FROM Production.Product  
WHERE ListPrice = 80.99  
   AND CONTAINS(Name, 'Mountain');  
GO  

b.B. Usar CONTAINS y una frase con <simple_term>Using CONTAINS and phrase with <simple_term>

En el siguiente ejemplo se obtienen todos los productos que contienen la palabra Mountain o Road.The following example returns all products that contain either the phrase Mountain or Road.

USE AdventureWorks2012;  
GO  
SELECT Name  
FROM Production.Product  
WHERE CONTAINS(Name, ' Mountain OR Road ')  
GO  

C.C. Usar CONTAINS con <prefix_term>Using CONTAINS with <prefix_term>

En el siguiente ejemplo se obtienen todos los nombres de producto con una palabra como mínimo que empiece por el prefijo "chain" en la columna Name.The following example returns all product names with at least one word starting with the prefix chain in the Name column.

USE AdventureWorks2012;  
GO  
SELECT Name  
FROM Production.Product  
WHERE CONTAINS(Name, ' "Chain*" ');  
GO  

D.D. Usar CONTAINS y OR con <prefix_term>Using CONTAINS and OR with <prefix_term>

En el siguiente ejemplo se obtienen todas las descripciones de categorías que contienen cadenas con los prefijos chain o full.The following example returns all category descriptions containing strings with prefixes of either chain or full.

USE AdventureWorks2012;  
GO  
SELECT Name  
FROM Production.Product  
WHERE CONTAINS(Name, '"chain*" OR "full*"');  
GO  

E.E. Usar CONTAINS con <proximity_term>Using CONTAINS with <proximity_term>

Se aplica a: desde SQL Server 2012 (11.x)SQL Server 2012 (11.x) hasta SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

En el siguiente ejemplo se buscan en la tabla Production.ProductReview todos los comentarios que contengan la palabra bike a una distancia de diez términos de la palabra "control" y en el orden especificado (es decir, donde "bike" preceda a "control").The following example searches the Production.ProductReview table for all comments that contain the word bike within 10 terms of the word "control" and in the specified order (that is, where "bike" precedes "control").

USE AdventureWorks2012;  
GO  
SELECT Comments  
FROM Production.ProductReview  
WHERE CONTAINS(Comments , 'NEAR((bike,control), 10, TRUE)');  
GO  

F.F. Usar CONTAINS con <generation_term>Using CONTAINS with <generation_term>

En el siguiente ejemplo se buscan todos los productos que tengan palabras derivadas de ride: riding, ridden, etc.The following example searches for all products with words of the form ride: riding, ridden, and so on.

USE AdventureWorks2012;  
GO  
SELECT Description  
FROM Production.ProductDescription  
WHERE CONTAINS(Description, ' FORMSOF (INFLECTIONAL, ride) ');  
GO  

G.G. Usar CONTAINS con <weighted_term>Using CONTAINS with <weighted_term>

En el siguiente ejemplo se buscan todos los nombres de productos que contengan las palabras performance, comfortable o smooth. Cada palabra tiene asignado un peso distinto.The following example searches for all product names containing the words performance, comfortable, or smooth, and different weights are given to each word.

USE AdventureWorks2012;  
GO  
SELECT Description  
FROM Production.ProductDescription  
WHERE CONTAINS(Description, 'ISABOUT (performance weight (.8),   
comfortable weight (.4), smooth weight (.2) )' );  
GO  

H.H. Usar CONTAINS con variablesUsing CONTAINS with variables

En el siguiente ejemplo se utiliza una variable en lugar de un término de búsqueda específico.The following example uses a variable instead of a specific search term.

USE AdventureWorks2012;  
GO  
DECLARE @SearchWord nvarchar(30)  
SET @SearchWord = N'Performance'  
SELECT Description   
FROM Production.ProductDescription   
WHERE CONTAINS(Description, @SearchWord);  
GO  

I.I. Usar CONTAINS con un operador lógico (AND)Using CONTAINS with a logical operator (AND)

En el ejemplo siguiente se utiliza la tabla ProductDescription de la base de datos AdventureWorks2012AdventureWorks2012 .The following example uses the ProductDescription table of the AdventureWorks2012AdventureWorks2012 database. La consulta usa el predicado CONTAINS para buscar las descripciones en las que el identificador de la descripción no es igual a 5 y la descripción contiene las palabras Aluminum y spindle.The query uses the CONTAINS predicate to search for descriptions in which the description ID is not equal to 5 and the description contains both the word Aluminum and the word spindle. La condición de búsqueda usa el operador booleano AND.The search condition uses the AND Boolean operator.

USE AdventureWorks2012;  
GO  
SELECT Description  
FROM Production.ProductDescription  
WHERE ProductDescriptionID <> 5 AND  
   CONTAINS(Description, 'Aluminum AND spindle');  
GO  

J.J. Usar CONTAINS para comprobar una inserción de filaUsing CONTAINS to verify a row insertion

En el ejemplo siguiente se usa CONTAINS dentro de una subconsulta SELECT.The following example uses CONTAINS within a SELECT subquery. Si se utiliza la base de datos AdventureWorks2012AdventureWorks2012, la consulta obtiene el valor de comentario de todos los comentarios de la tabla ProductReview en un determinado ciclo.Using the AdventureWorks2012AdventureWorks2012 database, the query obtains the comment value of all the comments in the ProductReview table for a particular cycle. La condición de búsqueda usa el operador booleano AND.The search condition uses the AND Boolean operator.

USE AdventureWorks2012;  
GO  
INSERT INTO Production.ProductReview   
  (ProductID, ReviewerName, EmailAddress, Rating, Comments)   
VALUES  
  (780, 'John Smith', 'john@fourthcoffee.com', 5,   
'The Mountain-200 Silver from AdventureWorks2008 Cycles meets and exceeds expectations. I enjoyed the smooth ride down the roads of Redmond');  
  
-- Given the full-text catalog for these tables is Adv_ft_ctlg,   
-- with change_tracking on so that the full-text indexes are updated automatically.  
WAITFOR DELAY '00:00:30';     
-- Wait 30 seconds to make sure that the full-text index gets updated.  
  
SELECT r.Comments, p.Name  
FROM Production.ProductReview AS r  
JOIN Production.Product AS p   
    ON r.ProductID = p.ProductID  
    AND r.ProductID = (SELECT ProductID  
FROM Production.ProductReview  
WHERE CONTAINS (Comments,   
    ' AdventureWorks2008 AND   
    Redmond AND   
    "Mountain-200 Silver" '));  
GO  

K.K. Realizar consultas por una propiedad de documentoQuerying on a document property

Se aplica a: desde SQL Server 2012 (11.x)SQL Server 2012 (11.x) hasta SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

La siguiente consulta busca una propiedad indizada, Title, en la columna Document de la tabla Production.Document.The following query searches on an indexed property, Title, in the Document column of the Production.Document table. La consulta solo devuelve documentos cuya propiedad Title contengan las cadenas Maintenance o Repair.The query returns only documents whose Title property contains the string Maintenance or Repair.

Nota

Para que una búsqueda por propiedad devuelva filas, los filtros que analizan la columna durante la indización deben extraer la propiedad especificada.For a property-search to return rows, the filter or filters that parse the column during indexing must extract the specified property. Asimismo, el índice de texto completo de la tabla especificada debe estar configurado de modo que contenga la propiedad.Also, the full-text index of the specified table must have been configured to include the property. Para obtener más información, vea Buscar propiedades de documento con listas de propiedades de búsqueda.For more information, see Search Document Properties with Search Property Lists.

Use AdventureWorks2012;  
GO  
SELECT Document 
FROM Production.Document  
WHERE CONTAINS(PROPERTY(Document,'Title'), 'Maintenance OR Repair');  
GO  

Consulte tambiénSee Also

Introducción a la búsqueda de texto completo Get Started with Full-Text Search
Creación y administración de catálogos de texto completo Create and Manage Full-Text Catalogs
CREATE FULLTEXT CATALOG (Transact-SQL) CREATE FULLTEXT CATALOG (Transact-SQL)
CREATE FULLTEXT INDEX (Transact-SQL) CREATE FULLTEXT INDEX (Transact-SQL)
Crear y administrar índices de texto completo Create and Manage Full-Text Indexes
Consultar con búsqueda de texto completo Query with Full-Text Search
CONTAINSTABLE (Transact-SQL) CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL) FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL) FREETEXTTABLE (Transact-SQL)
Consultar con búsqueda de texto completo Query with Full-Text Search
Búsqueda de texto completo Full-Text Search
Crear consultas de búsqueda de texto completo (Visual Database Tools) Create Full-Text Search Queries (Visual Database Tools)
WHERE (Transact-SQL) WHERE (Transact-SQL)
Buscar propiedades de documento con listas de propiedades de búsquedaSearch Document Properties with Search Property Lists