Convertir fonction InStr() de ACESS vers SQL

Fermé
zebeachboy - 12 avril 2008 à 22:16
phil_232 Messages postés 286 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 12 juin 2008 - 12 avril 2008 à 22:45
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
A voir également:

1 réponse

phil_232 Messages postés 286 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 12 juin 2008 33
12 avril 2008 à 22:45
Dans SQL Server tu utiliseras soit CHARINDEX (https://docs.microsoft.com/en-us/sql/t-sql/functions/charindex-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15 soit PATINDEX (http://msdn2.microsoft.com/en-us/library/ms188395.aspx): https://www.databasejournal.com/features/mssql/article.php/3071531/Using-SQL-Servers-CHARINDEX-and-PATINDEX.htm

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").
0