Convertir fonction InStr() de ACESS vers SQL
zebeachboy
-
phil_232 Messages postés 286 Statut Membre -
phil_232 Messages postés 286 Statut Membre -
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
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:
- Convertir fonction InStr() de ACESS vers SQL
- Fonction si et - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Convertir epub en kindle - Guide
- Windows 7 vers windows 10 - Accueil - Mise à jour
- Qwerty vers azerty - Guide
1 réponse
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").
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").