novembre
2011
Est-ce qu’il existe sous SQL SERVER une fonction native qui retourne le nombre de caractères d’une chaîne ? la réponse à cette question est NON. Jusqu’à ce jour (jour où j’écris ce petit billet), SQL Server ne dispose pas de fonction native qui retourne le nombre de caractères d’une chaîne. La fonction LEN disponible sous SQL Server retourne le nombre de caractères de l’expression de type chaîne spécifiée, à l’exception des espaces de droite. Pourquoi cette exception ? Pourquoi SQL Server ne met pas à disposition une fonction équivalente à LENGTH (sous ORACLE) ?
Mettons en perspective les fonctions LEN (sql server)/LENGTH (oracle) et DATALENGTH (sql server)/LENGTHB (oracle)
=> LEN/LENGTH
SELECT LENGTH(N' SQL SERVER ') FROM DUAL ; --> retourne 12
=> DATALENGTH/LENGTHB
SELECT DATALENGTH(N' SQL SERVER ') --> retourne: 24
SELECT LENGTHB(N' SQL SERVER ') FROM DUAL; -->retourne 24
On pourrait poursuivre la comparaison en prenant des données de type numérique (par exemple 123.123) ou de type datetime (getdate())… Bref l’idée est de se rendre compte que lorsqu’il existe un ou plusieurs espaces à droite d’une chaîne la fonction LEN proposée par SQL Server n’est plus adaptée. Pourquoi SQL Server ne propose pas une autre fonction pour combler ce problème d’espaces à droite non gérés par LEN ?
Et si on regarde du côté d’un CLR c’est juste un quart de ligne de code C# .NET
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class CLR_LENGTH
{
[Microsoft.SqlServer.Server.SqlFunction]
public static int LENGTH(string str)
{
return str.Length;
}
};
=> Résultat de la fonction CLR LENGTH sous SQL SERVER
SELECT dbo.LENGTH(' SQL SERVER ') -- retourne 12
J’espère que MS mettra à disposition dans la version suivante de SQL SERVER 2012 la fonction LENGTH en standard.
———————–
Etienne ZINZINDOHOUE
———————–