Accéder au contenu principal

Tester un début de chaine: Left ou Like ?

Pour tester la valeur du début d'une chaîne de caractères, quelle est la solution la plus efficace:
IF Left(strTexte, 5) = "TOTAL" THEN
ou bien
IF strTexte LIKE "TOTAL*" THEN

Pour répondre à cette palpitante question j'ai mesuré quelques dizaines de milliers d'itérations, et le résultat est intéressant: la solution LEFT prend 6 fois plus de temps que la solution Like, et cela en incluant le temps des autres traitements.

Allons plus loin: qu'en est-il lorsqu'on veut tester l'extrémité droite de la chaîne de caractères ?
Après test, RIGHT utilise le même temps que LEFT, par contre Like "*Total" prend 3 fois plus de temps que Like "Total*".
Like reste donc dans tous les cas plus performant, mais d'un facteur 3 au lieu d'un facteur 6.

Si l'on tient compte que les temps mesurés incluaient d'autres opérations (boucle FOR..NEXT, affichage du résultat..) l'impact réel des facteurs mesurés est encore plus important.

Commentaires

Posts les plus consultés de ce blog

ROW_NUMBER OVER PARTITION en Access

Ceux qui ont l'habitude de travailler avec une "grosse" base données comme SQL Server / Oracle / PostGreSQL, sont parfois frustrés face à certaines lacunes du SQL d'Access.   Prenons par exemple: ROW_NUMBER() OVER PARTITION, dont l'absence rend certaines requêtes très compliquées.   J'ai donc écrit une petite fonction VBA qui peut être appelée depuis un query Access et qui simulera assez bien ce ROW_NUMBER() OVER PARTITION.   Notez que ceci ne fonctionnera pas correctement dans une vue ou un formulaire interactif. Par contre comme source d'un rapport ou d'un export Excel, c'est impeccable.   En pratique il est préférable d'initialiser la fonction avec une chaîne de caractères "improbable" avant de lancer le rapport, comme indiqué dans le code.

Calculate MAX of a list in VBA

Strangely such a function is not available in VBA. Here is one that works with any number of strings or numbers. Function Largest(ParamArray a() As Variant) As Variant 'returns the largest element of list 'List is supposed to be consistent: all nummbers, dates, strings. 'Nulls are allowed, but not in first position. Eventually provide a first low dummy value 'e.g:   largest(2,6,-9,7,3)         -> 7 '       largest("d", "z", "c", "x") -> "z" 'by Patrick Honorez --- www.idevlop.com     Dim result As Variant     Dim i As Integer          result = a(LBound(a))          For i = LBound(a) + 1 To UBound(a)         If result < Nz(a(i), result) Then             result = a(i)         End If     Next i     Largest = result End Function