Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Recherche SQL personnalisée avec des caractères spéciaux

Je pense que vous pouvez facilement résoudre ce problème en créant un INDEX DE TEXTE COMPLET sur votre KWD colonne. Ensuite, vous pouvez utiliser le CONTIENT query pour rechercher des phrases. L'index FULL TEXT prend soin de la ponctuation et ignore automatiquement les virgules.

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

Pour rechercher plusieurs mots (comme le mobile phone dans votre cas) utilisez les phrases citées :

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

Comme indiqué ci-dessous, les phrases citées sont importantes dans toutes les recherches pour éviter les mauvaises recherches dans le cas, par ex. lorsqu'un terme de recherche est "travail sur tablette" et que la valeur KWD est woman,girl,Digital Tablet,working,sitting,online

Il existe un cas particulier pour un seul - terme de recherche. Le NOT ne peut pas être utilisé comme premier terme dans le CONTAINS. Par conséquent, la requête comme celle-ci doit être utilisée :

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