3/5/12

[tsql] LEN vs DATALENGTH

Holas a todos. Este es otro registro programístico, hoy sobre TSQL (SQL de Microsoft SQL Server).

Mi jefe me comentó la existencia de una función llamada DATALENGTH, lo cual me extrañó, teniendo en cuenta la existencia de la función LEN. Pero buscando en internet la diferencia existente entre ambas, nos encontramos con lo siguiente:

LEN: función que retorna la cantidad de caracteres de una cadena, ignorando los espacios vacíos después de la cadena.
DATALENGTH: función que retorna la cantidad de bytes de una cadena.

Ateniéndonos al detalle clave de "caracteres vs bytes", nos encontramos con que las funciones, aunque en muchos casos nos darán idéntico resultado, en más de una ocasión nos reportarán distintos conteos finales. Y, probablemente, no sólo habrá diferencia a nivel de resultado, sino de performance, ya que LEN realiza una tarea extra en su desempeño (hacer RTRIM a la cadena), por lo que DATALENGTH en teoría debiera funcionar más rápido que LEN.

Volviendo al tema "caracteres vs bytes", tener en claro que:
  • 1 caracter es 1 byte
  • 1 espacio vacío es 1 byte
Todo esto quedará más claro si vemos unos ejemplos:

Ejemplo 1: Si tenemos que:

SELECT LEN('hola mundo'), DATALENGTH('hola mundo');

...el resultado sería:
10 | 10

Ejemplo 2: Si tenemos que:

SELECT LEN(' hola mundo'), DATALENGTH(' hola mundo');

...el resultado sería:
11 | 11

Ejemplo 3: Si tenemos que:

SELECT LEN('hola mundo '), DATALENGTH('hola mundo ');

...el resultado sería:
10 | 11

Ejemplo 4: Si tenemos que:

SELECT LEN(' hola mundo '), DATALENGTH(' hola mundo ');

...el resultado sería:
11 | 12


Espero que les sirva para cuando elijan la mejor forma de hacer sus propias consultas :D
Gracias por leer y hasta luego! :)

Publicar un comentario