juin
2012
Lorsque l’on manipule des chaîne de caractères se terminant par un ou une séries d’espace, il est bon d’avoir un certain nombre de considérations à l’esprit.
‘abc’ = ‘abc ‘ se vérifie
Lorsque vous comparez deux chaînes de caractère de longueurs différentes via l’opérateur de comparaison « = », SQL Server va « au préalable » (et selon la norme ANSI SQL92) forcer les chaînes a avoir des tailles identiques en rallonger la plus courte par des espaces terminaux (PADDING)
Le résultat en est par exemple que ‘abc’ = ‘abc ‘ se vérifie.
infos complémentaires
‘abc’ LIKE ‘abc ‘ ne se vérifie pas
Comme la nature du LIKE ne se limite pas au test d’égalité, celui n’est pas, comme l’opérateur « = », soumis à la norme évoquée plus haut.
Le résultat en est par exemple que ‘abc’ LIKE ‘abc ‘ ne se vérifie pas.
LEN(‘abc ‘) renvoi 3 et non 4
Par définition la fonction LEN qui renvoi la taille d’une chaîne de caractère passée en paramètre ne tient pas compte des espaces en fin de cette chaîne
Par conséquent, LEN(‘abc ‘) renvoi 3 et non 4.
3 Commentaires + Ajouter un commentaire
Commentaires récents
- Et si on se passait des clés étrangères ? dans
- Quand les fonctions tables surpassent les vues et CTE. dans
- Quelques choses à savoir sur les espaces en fin de chaîne dans
- Assigner des variables et renvoyer un résultat en une seule opération dans
- Quelques choses à savoir sur les espaces en fin de chaîne dans
http://blog.developpez.com/zinzineti/p10550/sql-server-2008/attention-a-la-fonction-len/
DATALENGTH() renvoyant un résultat dépendant de l’encodage (UNICODE par exemple), je préfère en éviter l’emploi.
Alors même si DATALENGTH(‘abc ‘) renverra bien 4 (puisqu’il s’agit d’une chaîne non unicode où chaque lettre occupe un octet), je préfère utilisez LENGTH([chaîne unocide ou non] + ‘.’) – 1
Bonjour SergeJack,
En effet pour le dernier exemple, si l’on souhaite prendre en compte les espaces, il faudra utiliser la fonction DATALENGTH()
@++