CONTAINS función escalar
La función CONTAINS busca un índice de búsqueda de texto utilizando criterios que se especifican en un argumento de búsqueda y devuelve un resultado sobre si se ha encontrado o no una coincidencia.
El esquema es SYSIBM.
- nombre-columna
- Especifica un nombre calificado o no calificado de una columna que contiene un índice de búsqueda de texto en el que debe buscarse. La columna debe existir en la tabla o vista que se identifica en la cláusula FROM de la sentencia y la columna de la tabla, o la columna de la tabla base subyacente de la vista debe tener un índice de búsqueda de texto asociado. La expresión subyacente de la columna de una vista debe ser una referencia de columna simple a la columna de una tabla subyacente, directamente o a través de otra vista anidada.
- argumento-búsqueda
- Especifica una expresión que devuelve un valor que es un valor de cadena (excepto un LOB) que contiene los términos que se van a buscar y no debe ser todo espacios en blanco o la cadena vacía. La longitud real de la cadena no debe exceder los 4096 caracteres Unicode. El valor se convierte a Unicode antes de utilizarlo para buscar el índice de búsqueda de texto. El número máximo de términos por consulta no debe exceder los 1024.
- constante-serie
- Identifica una constante de tipo serie que especifica las opciones de argumento de
búsqueda en vigor para la función.
Las opciones que pueden especificarse como parte de las opciones-argumento-búsqueda son las siguientes:
- IDIOMA DE CONSULTA = valor
- Especifica el idioma de la consulta. El valor puede ser cualquiera de los códigos de idioma soportados. Si no se especifica la opción QUERYLANGUAGE, el valor predeterminado es el valor de idioma del índice de búsqueda de texto utilizado cuando se invoca la función. Si el valor de idioma del índice de búsqueda de texto es AUTO, el valor predeterminado para QUERYLANGUAGE es en_US.
- RESULTLIMIT=valor
- Especifica el número máximo de resultados que el motor de búsqueda
subyacente puede devolver. El valor puede ser un valor entero en el rango 1-2 147 483 647. Si no se especifica la opción RESULTLIMIT, no habrá ningún límite de
resultados en vigor para la consulta.
Esta función escalar no se puede invocar para cada fila de la tabla de resultados, dependiendo del plan que elija el optimizador. Esta función se puede llamar una vez para la consulta al motor de búsqueda subyacente, y el motor de búsqueda devuelve un conjunto de resultados de todas las claves primarias que coinciden. A continuación, este conjunto de resultados se une a la tabla que contiene la columna para identificar las filas de resultados. En este caso, el valor RESULTLIMIT actúa como un FETCH FIRST ROWS desde el motor de búsqueda de texto subyacente, y puede utilizarse como optimización. Si el motor de búsqueda se llama para cada fila del resultado porque el optimizador determina que es el mejor plan, entonces la opción RESULTLIMIT no tiene efecto. Además, la opción RESULTLIMIT no tiene efecto cuando se utiliza la función CONTAINS junto con los operadores de comparación (<, >, <= y >=) o el operador de igualdad (=) y un valor de 0 (cero).
- SYNONYM = OFF o SYNONYM = ON
- Especifique si se debe utilizar un diccionario de sinónimos que esté asociado con el índice de búsqueda de texto. Utilice la herramienta de sinónimos para añadir un diccionario de sinónimos a la colección. El
valor predeterminado es OFF.
- OFF
- No utilizar un diccionario de sinónimos.
- ON
- Se utiliza el diccionario de sinónimos que está asociado con el índice de búsqueda de texto.
El resultado de la función es un entero grande. Si el segundo argumento puede ser nulo, el resultado puede ser nulo. Si el segundo argumento es nulo, el resultado es el valor nulo. Si el tercer argumento es nulo, el resultado es como si el tercer argumento no se hubiera especificado.
El resultado es 1 si el documento contiene una coincidencia con los criterios de búsqueda especificados en el argumento de búsqueda. De lo contrario, el resultado es 0.
CONTAINS es una función no determinante.
ejemplos
- Ejemplo 1
- Supongamos que la información sobre las habilidades de los empleados se almacena en una tabla llamada EMP_RESUME. La siguiente declaración encuentra a todos los empleados que tienen "COBOL" en su currículum. El argumento de búsqueda de texto no es sensible a las mayúsculas y minúsculas.
- Ejemplo 2
El argumento de búsqueda no tiene que ser necesariamente una constante de tipo serie. El argumento de búsqueda puede ser cualquier expresión de serie SQL, incluida una serie contenida en una variable host.
La siguiente declaración busca el término exacto «ate» en la columna COMENTARIO:
char search_arg[100]; /* input host variable */ ... EXEC SQL DECLARE C3 CURSOR FOR SELECT CUSTKEY FROM K55ADMIN.CUSTOMERS WHERE CONTAINS(COMMENT, :search_arg)= 1 ORDER BY CUSTKEY; strcpy(search_arg, "ate"); EXEC SQL OPEN C3; ...- Ejemplo 3
La sentencia siguiente busca aleatoriamente 10 estudiantes que hayan escrito artículos en línea que contengan la frase "fossil fuel" en español, es decir, "combustible fósil". Estos estudiantes serán invitados a una entrevista de radio.
Utilice el diccionario de sinónimos que se ha creado para el índice de búsqueda de texto asociado. Como solo se necesitan 10 estudiantes, puede optimizar la consulta utilizando la opción RESULTLIMIT para limitar el número de resultados del servidor de búsqueda de texto subyacente.
SELECT FIRSTNME, LASTNAME FROM STUDENT_ESSAYS WHERE CONTAINS(TERM_PAPER, 'combustible fósil', 'QUERYLANGUAGE= es_ES RESULTLIMIT = 10 SYNONYM=ON') = 1- Ejemplo 4
El siguiente ejemplo muestra cómo se puede utilizar la especificación CAST en una sentencia preparada dinámicamente para proporcionar un marcador de parámetro tipado como argumento de la función CONTAINS. La especificación CAST define el tipo de datos para el marcador de parámetro (?).
CONTAINS(C1,CAST(? AS CHAR(10)))
