Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Che cos'è DATALENGTH() in SQL Server?

In SQL Server (e Azure), T-SQL DATALENGTH() La funzione restituisce il numero di byte utilizzati per rappresentare qualsiasi espressione.

Ad esempio:

SELECT DATALENGTH('Lit');

Risultato:

3

In questo caso, ci sono 3 byte nella stringa Lit .

Tuttavia, questo è un semplice esempio. I risultati possono avere un aspetto molto diverso, a seconda del tipo di dati.

Nell'esempio sopra, abbiamo visto che ci sono 3 byte nella parola Lit . Questo è anche il numero esatto di caratteri nella stringa. Ma se restituiamo la stessa parola da una colonna in un database, potremmo ottenere un risultato diverso. Ad esempio, questo:

SELECT 
    ArtistName, 
    DATALENGTH(ArtistName) AS DataLength 
FROM Artists 
WHERE ArtistName = 'Lit';

Risultato:

ArtistName  DataLength
----------  ----------
Lit         6          

In questo caso la lunghezza dei dati è 6.

Il motivo è perché, in questo particolare database, la colonna ha un nvarchar(255) tipo di dati. Il nvarchar il tipo di dati è una stringa unicode, che memorizza 2 byte per carattere (che raddoppia effettivamente la lunghezza dei dati). Se la colonna avesse invece utilizzato varchar(255) avrebbe una lunghezza di dati di 3. Tuttavia, se dicesse, char(25) la stringa dovrebbe avere una lunghezza di dati di 25.

Inoltre, se in precedenza era stato char(25) ma è stato poi convertito in varchar(255) avrebbe comunque una lunghezza dati di 255.

Tuttavia, in tutti i casi, il LEN() funzione avrebbe restituito 3.

Spazi vuoti finali

Il DATALENGTH() la funzione conta gli spazi finali (ad es. spazi alla fine della stringa, tabulazioni, ritorni a capo, ecc.).

Esempio:

SELECT DATALENGTH('Lit');

Risultato:

4

In questo esempio ho semplicemente aggiunto uno spazio alla fine della stringa. Questa è un'altra delle differenze tra LEN() e DATALENGTH() .

Puoi vedere esempi di LEN() e DATALENGTH() fianco a fianco in LEN() rispetto a DATALENGTH() .

Tipo di reso

Il DATALENGTH() la funzione restituisce un tipo di dati int , a meno che l'espressione non sia  varchar(max)nvarchar(max)varbinary(max) , nel qual caso restituisce bigint .