Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Ricerca personalizzata con caratteri speciali

Penso che tu possa risolvere facilmente questo problema creando un INDICE DI TESTO COMPLETO sul tuo KWD colonna. Quindi puoi utilizzare CONTAINS query per cercare le frasi. L'indice FULL TEXT si occupa della punteggiatura e ignora automaticamente le virgole.

-- 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"')

Per cercare più parole (come il mobile phone nel tuo caso) usa le frasi citate:

SELECT AS_ID FROM tbl_main
WHERE CONTAINS(KWD, '"woman" AND "mobile phone"')

Come commentato di seguito, le frasi citate sono importanti in tutte le ricerche per evitare ricerche errate nel caso ad es. quando un termine di ricerca è "tablet funzionante" e il valore KWD è woman,girl,Digital Tablet,working,sitting,online

Esiste un caso speciale per un singolo - termine di ricerca. Il NOT non può essere utilizzato come primo termine nel CONTAINS. Pertanto, la query come questa dovrebbe essere utilizzata:

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