2010-03-12 20 views
13

Tengo muchos resultados innecesarios usando el método contains() en mi consulta. No me diga que use algo parecido o algo diferente. Está codificado y no puede ser cambiado.¿Cómo funciona contains() en PL-SQL?

+2

¿Podría publicar la consulta? – Padmarag

+0

puedo pasar cualquier parámetro en el contenido para limitar los resultados de búsqueda al resultado exacto – Artic

+0

Seleccionar * de blabla donde contiene (dFullText, "coche") – Artic

Respuesta

15

Contiene se utiliza en los campos de texto que tienen un 'Índice de contexto', que indexa un campo de texto para la búsqueda. El uso estándar es como esto (usando el operador score para mostrar lo que se devuelve desde el contains cláusula basado en el 1 en contains que coincida con el 1 en score):

SELECT score(1), value 
FROM table_name 
WHERE CONTAINS(textField, 'searchString', 1) > 0; 

Para los datos de este tipo en la tabla table_name

value | textField 
-------|----------------------------------------------- 
A  | 'Here is searchString. searchString again.' 
B  | 'Another string' 
C  | 'Just one searchString' 

Esa consulta devolvería

2 A 
1 C 

contiene Así es similar a como, pero contará cuántas veces se produce una cadena en un campo de texto. No pude encontrar un recurso mediante contiene la forma en que se utiliza en la consulta informados, pero creo que volvería filas donde dFullText tiene por lo menos un caso de car en ella, o el equivalente de este SQL:

Select * from blabla where dFullText like "%car%" 

Here es otra fuente.

+0

¿Hay alguna diferencia entre contains() e instr()? – Rene

+0

@Rene, sí, son diferentes. 'Contains()' cuenta cuántas veces ocurre una cadena en un campo de texto y devolvería ese número. 'instr()' busca una cadena en un campo (u otra cadena) y devuelve el índice de la primera cadena de búsqueda encontrada (o 0 si no se encuentra). Vea ejemplos de 'instr()' en http://www.techonthenet.com/oracle/functions/instr.php – rosscj2533

0

ver este ejemplo de oracle.com

declare 
rowno number := 0; 
    begin 
    for c1 in (SELECT SCORE(1) score, title FROM news 
      WHERE CONTAINS(text, 'oracle', 1) > 0 
      ORDER BY SCORE(1) DESC) 
    loop 
    rowno := rowno + 1; 
    dbms_output.put_line(c1.title||': '||c1.score); 
exit when rowno = 10; 
end loop; 
end; 
Cuestiones relacionadas