Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

O que é DATALENGTH() no SQL Server?


No SQL Server (e no Azure), o T-SQL DATALENGTH() A função retorna o número de bytes usados ​​para representar qualquer expressão.

Por exemplo:
SELECT DATALENGTH('Lit');

Resultado:
3

Neste caso, existem 3 bytes na string Lit .

No entanto, este é um exemplo simples. Os resultados podem ser muito diferentes, dependendo do tipo de dados.


No exemplo acima, vimos que existem 3 bytes na palavra Lit . Isso também é exatamente quantos caracteres estão na string. Mas se retornarmos a mesma palavra de uma coluna em um banco de dados, poderemos obter um resultado diferente. Por exemplo, isso:
SELECT 
    ArtistName, 
    DATALENGTH(ArtistName) AS DataLength 
FROM Artists 
WHERE ArtistName = 'Lit';

Resultado:
ArtistName  DataLength
----------  ----------
Lit         6          

Neste caso, o comprimento dos dados é 6.

O motivo disso é que, nesse banco de dados específico, a coluna tem um nvarchar(255) tipo de dados. O nvarchar tipo de dados é uma string unicode, que armazena 2 bytes por caractere (o que efetivamente dobra o comprimento dos dados). Se a coluna tivesse usado varchar(255) ele teria um comprimento de dados de 3. No entanto, se tivesse  digamos, char(25) a string teria um comprimento de dados de 25.

Além disso, se antes fosse char(25) mas foi convertido para varchar(255) ele ainda teria um comprimento de dados de 255.

No entanto, em todos os casos, o LEN() função teria retornado 3.

Brancos à direita


O DATALENGTH() função conta os espaços em branco à direita (por exemplo, espaços no final da string, tabulações, retornos de carro, etc).

Exemplo:
SELECT DATALENGTH('Lit');

Resultado:
4

Neste exemplo, simplesmente adicionei um espaço ao final da string. Esta é outra das diferenças entre LEN() e DATALENGTH() .

Você pode ver exemplos de LEN() e DATALENGTH() lado a lado em LEN() vs DATALENGTH() .

Tipo de retorno


O DATALENGTH() função retorna um tipo de dados de int , a menos que a expressão seja  varchar(max)nvarchar(max) ou varbinary(max) , caso em que retorna bigint .