Convertir fonction InStr() de ACESS vers SQL [Fermé]

Signaler
-
phil_232
Messages postés
289
Date d'inscription
jeudi 6 décembre 2007
Statut
Membre
Dernière intervention
12 juin 2008
-
Bonjour,
Je cherche à convertir mes requêtes SQL de ACCESS vers SQL SERVEUR, et je bute sur une fonction dont je ne connais pas l'équivalent dans MSSQL, la fonction INSTR().

Dans ACCESS, j'écris : "SELECT * FROM CLIENTS WHERE INSTR(Villes, "saint")>0"
ce qui me retournera toutes les villes qui contiennent le mot "saint" dans le nom.

Je ne sais pas comment le faire maintenant pour SQL SERVEUR car la fonction INSTR() n'est pas valide...

Merci de votre aide si vous savez...
Phil

1 réponse

Messages postés
289
Date d'inscription
jeudi 6 décembre 2007
Statut
Membre
Dernière intervention
12 juin 2008
31
Dans SQL Server tu utiliseras soit CHARINDEX (http://msdn2.microsoft.com/en-us/library/ms186323.aspx) soit PATINDEX (http://msdn2.microsoft.com/en-us/library/ms188395.aspx): http://www.databasejournal.com/features/mssql/article.php/3071531

Les deux renvoient la première position où le texte recherché a été trouvé.

Mais ATTENTION : "SELECT * FROM CLIENTS WHERE INSTR(Villes, "saint")>0" doit parcourir TOUTES les lignes de la table pour trouver le résultat (SQL Server est obligé d'analyser chaque nom de ville). Aucun moyen d'utiliser un index et donc cette requête sera très, très lente.

Tu pourras gagner pas mal de performance en faisant

"SELECT * FROM CLIENTS WHERE Villes LIKE 'Saint%'

Puisque comme ça tu dis à SQL Server qu'il doit commencer la recherche chaque fois au début de la ligne tu gagneras énormément en vitesse car sous ces conditions un index peut être utilisé (il est seulement obligé d'analyser les villes qui commencent par "Saint").