V SQL Server (a Azure) T-SQL DATALENGTH()
funkce vrací počet bajtů použitých k reprezentaci jakéhokoli výrazu.
Například:
SELECT DATALENGTH('Lit');
Výsledek:
3
V tomto případě jsou v řetězci Lit
3 bajty .
Toto je však jednoduchý příklad. Výsledky mohou vypadat velmi odlišně v závislosti na typu dat.
Ve výše uvedeném příkladu jsme viděli, že slovo Lit
obsahuje 3 bajty . To je také přesně to, kolik znaků je v řetězci. Ale pokud vrátíme stejné slovo ze sloupce v databázi, můžeme získat jiný výsledek. Například toto:
SELECT ArtistName, DATALENGTH(ArtistName) AS DataLength FROM Artists WHERE ArtistName = 'Lit';
Výsledek:
ArtistName DataLength ---------- ---------- Lit 6
V tomto případě je délka dat 6.
Důvodem je to, že v této konkrétní databázi má sloupec nvarchar(255) datový typ. nvarchar datový typ je řetězec unicode, který ukládá 2 bajty na znak (což efektivně zdvojnásobuje délku dat). Pokud by sloupec místo toho používal varchar(255) měl by délku dat 3. Pokud by však měl řekněme char(25) řetězec by měl délku dat 25.
Také, pokud předtím byl char(25) ale poté byl převeden na varchar(255) stále by měla délku dat 255.
Ve všech případech však LEN()
funkce by vrátila 3.
Koncové mezery
DATALENGTH()
funkce počítá koncové mezery (např. mezery na konci řetězce, tabulátory, konce řádku atd.).
Příklad:
SELECT DATALENGTH('Lit ');
Výsledek:
4
V tomto příkladu jsem jednoduše přidal mezeru na konec řetězce. Toto je další z rozdílů mezi LEN()
a DATALENGTH()
.
Můžete si prohlédnout příklady LEN()
a DATALENGTH()
vedle sebe v LEN()
vs DATALENGTH()
.
Typ návratu
DATALENGTH()
funkce vrací datový typ int , pokud výraz není varchar(max) , nvarchar(max) nebo varbinary(max) , v takovém případě vrátí bigint .