2010-05-21 17 views
7

¿Cómo se puede escapar de un carácter de comillas dobles dentro de una función MS SQL 'contains'?¿Cómo se escapan las comillas dobles dentro de una función SQL de texto completo 'contains'?

SELECT decision 
FROM table 
WHERE CONTAINS(decision, '34" AND wide') 

normalmente contiene() espera comillas dobles para rodear una frase exacta a la altura, pero quiero buscar un carácter real cita doble. Intenté escapar con \, `e incluso con otra cita doble, pero nada de eso funcionó.

P.S. Me doy cuenta de que un ejemplo simple como este también podría hacerse usando la instrucción LIKE, pero necesito usar la función de búsqueda de texto completo. La consulta que proporcioné aquí se ha simplificado de mi consulta real por ejemplo.

+0

pregunta relacionada cuales OP ya se ha visto: http://stackoverflow.com/questions/387198/escape-double-quotes-in-sql-2005-2008 – bernie

Respuesta

5

De documentation:

Puntuacion se ignora. Por lo tanto, CONTAINS(testing, "computer failure") coincide con una fila con el valor "¿Dónde está mi computadora? No encontrarlo sería costoso".

Desde FULLTEXT ni siquiera el índice de puntuacion, que necesitará para poner a filtrar los resultados utilizando LIKE:

SELECT decision 
FROM table 
WHERE CONTAINS(decision, '34 AND wide') 
     AND decision LIKE '%34"%' 

Esto conservará las ventajas de texto completo.

2

La respuesta anterior no funciona en SQL Server 2008 si su cadena es para un número de un solo dígito.

Esto funciona:

SELECT partdescription 
FROM table 
WHERE CONTAINS(partdescription, '10') 
     AND decision LIKE '%10"%' 

esto no funciona:

SELECT partdescription 
FROM table 
WHERE CONTAINS(partdescription, '6') 
     AND decision LIKE '%6"%'' 

EDIT: Explicación de por qué un solo dígito no puede ser indexado.

Si se utiliza la lista SISTEMA palabra de parada (o palabra de ruido), contiene cada uno de los dígitos numéricos como palabras para ignorar. Puede cambiar el contenido de la lista Detener palabra o puede desactivar las Palabras de detención por completo.

ALTER FULLTEXT INDEX ON dbo.my_ft_table SET STOPLIST = OFF; 

Una vez que se realiza uno de estos cambios, el texto afectado se debe volver a indexar antes de que se puedan buscar los dígitos individuales. Después de la reindexación, será posible buscar '6'.

+0

que la explicación actualizada para incluir por qué un solo dígito serán o no ser indexado – RLF

Cuestiones relacionadas