Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Pesquisa personalizada SQL com caracteres especiais


Acho que você pode resolver isso facilmente criando um FULL TEXT INDEX no seu KWD coluna. Em seguida, você pode usar o CONTAINS consulta para pesquisar frases. O índice FULL TEXT cuida da pontuação e ignora as vírgulas automaticamente.
-- If search text is = Man,Businessman then the query will be
SELECT AS_ID FROM tbl_main
WHERE CONTAINS(KWD, '"Man" AND "Businessman"')

-- If search text is = Man,-Businessman then  the query will be
SELECT AS_ID FROM tbl_main
WHERE CONTAINS(KWD, '"Man" AND NOT "Businessman"')

-- If search text is = woman,girl,-Working  the query will be
SELECT AS_ID FROM tbl_main
WHERE CONTAINS(KWD, '"woman" AND "girl" AND NOT "working"')

Para pesquisar as várias palavras (como o mobile phone no seu caso) use as frases citadas:
SELECT AS_ID FROM tbl_main
WHERE CONTAINS(KWD, '"woman" AND "mobile phone"')

Conforme comentado abaixo, as frases citadas são importantes em todas as pesquisas para evitar pesquisas ruins no caso de, por exemplo, quando um termo de pesquisa for "tablet working" e o valor KWD for woman,girl,Digital Tablet,working,sitting,online

Existe um caso especial para um único - termo de pesquisa. O NOT não pode ser usado como o primeiro termo do CONTAINS. Portanto, a consulta como esta deve ser usada:
-- If search text is = -Working  the query will be
SELECT AS_ID FROM tbl_main
WHERE NOT CONTAINS(KWD, '"working"')