En SQL Server (y Azure), T-SQL DATALENGTH()
La función devuelve el número de bytes utilizados para representar cualquier expresión.
Por ejemplo:
SELECT DATALENGTH('Lit');
Resultado:
3
En este caso, hay 3 bytes en la cadena Lit
.
Sin embargo, este es un ejemplo simple. Los resultados pueden verse muy diferentes, según el tipo de datos.
En el ejemplo anterior, vimos que hay 3 bytes en la palabra Lit
. Esto también pasa a ser exactamente cuántos caracteres hay en la cadena. Pero si devolvemos esa misma palabra de una columna en una base de datos, podríamos obtener un resultado diferente. Por ejemplo, esto:
SELECT ArtistName, DATALENGTH(ArtistName) AS DataLength FROM Artists WHERE ArtistName = 'Lit';
Resultado:
ArtistName DataLength ---------- ---------- Lit 6
En este caso, la longitud de los datos es 6.
Esto se debe a que, en esta base de datos en particular, la columna tiene nvarchar(255) tipo de datos. El nvarchar El tipo de datos es una cadena Unicode, que almacena 2 bytes por carácter (lo que efectivamente duplica la longitud de los datos). Si la columna hubiera usado varchar(255) tendría una longitud de datos de 3. Sin embargo, si tuviera, por ejemplo, char(25) la cadena tendría una longitud de datos de 25.
Además, si previamente hubiera sido char(25) pero luego se convirtió a varchar(255) todavía tendría una longitud de datos de 255.
Sin embargo, en todos los casos, el LEN()
la función habría devuelto 3.
Blancos finales
El DATALENGTH()
La función cuenta los espacios en blanco finales (por ejemplo, espacios al final de la cadena, tabulaciones, retornos de carro, etc.).
Ejemplo:
SELECT DATALENGTH('Lit');
Resultado:
4
En este ejemplo, simplemente agregué un espacio al final de la cadena. Esta es otra de las diferencias entre LEN()
y DATALENGTH()
.
Puedes ver ejemplos de LEN()
y DATALENGTH()
lado a lado en LEN()
frente a DATALENGTH()
.
Tipo de devolución
El DATALENGTH()
la función devuelve un tipo de datos de int , a menos que la expresión sea varchar(max) , nvarchar(máximo) o varbinary(máx.) , en cuyo caso devuelve bigint .