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

Hvad er DATALENGTH() i SQL Server?

I SQL Server (og Azure), T-SQL DATALENGTH() funktion returnerer antallet af bytes brugt til at repræsentere ethvert udtryk.

For eksempel:

SELECT DATALENGTH('Lit');

Resultat:

3

I dette tilfælde er der 3 bytes i strengen Lit .

Dette er dog et simpelt eksempel. Resultaterne kan se meget forskellige ud, afhængigt af datatypen.

I ovenstående eksempel så vi, at der er 3 bytes i ordet Lit . Dette er tilfældigvis også præcis, hvor mange tegn der er i strengen. Men hvis vi returnerer det samme ord fra en kolonne i en database, kan vi få et andet resultat. For eksempel dette:

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

Resultat:

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

I dette tilfælde er datalængden 6.

Årsagen til dette er, at kolonnen i denne særlige database har en nvarchar(255) datatype. nvarchar datatype er en unicode-streng, som gemmer 2 bytes pr. tegn (hvilket effektivt fordobler datalængden). Hvis kolonnen i stedet havde brugt varchar(255) den ville have en datalængde på 3. Men hvis den havde  sige, char(25) strengen ville have en datalængde på 25.

Også hvis det tidligere havde været char(25) men det blev derefter konverteret til varchar(255) den ville stadig have en datalængde på 255.

Men i alle tilfælde er LEN() funktion ville have returneret 3.

Tilsluttede emner

DATALENGTH() Funktionen tæller efterstillede blanktegn (f.eks. mellemrum for enden af ​​strengen, tabulatorer, vognretur osv.).

Eksempel:

SELECT DATALENGTH('Lit');

Resultat:

4

I dette eksempel tilføjede jeg blot et mellemrum til enden af ​​strengen. Dette er endnu en af ​​forskellene mellem LEN() og DATALENGTH() .

Du kan se eksempler på LEN() og DATALENGTH() side om side i LEN() vs DATALENGTH() .

Returtype

DATALENGTH() funktion returnerer en datatype int , medmindre udtrykket er  varchar(max)nvarchar(max) eller varbinary(max) , i hvilket tilfælde den returnerer bigt .


  1. Avanceret partitionsmatchning for partitionsmæssig joinforbindelse

  2. Hvordan tester jeg i WiX for eksistensen af ​​en registreringsnøgle (ikke værdi) til Oracle ODP.Net

  3. Undgå Database Vendor Lock-In til MySQL eller MariaDB

  4. Forespørg kun de første data fra en tabel