W SQL Server (i Azure) T-SQL DATALENGTH()
funkcja zwraca liczbę bajtów użytych do przedstawienia dowolnego wyrażenia.
Na przykład:
SELECT DATALENGTH('Lit');
Wynik:
3
W tym przypadku łańcuch zawiera 3 bajty Lit
.
Jest to jednak prosty przykład. Wyniki mogą wyglądać bardzo różnie, w zależności od typu danych.
W powyższym przykładzie widzieliśmy, że w słowie Lit
są 3 bajty . Zdarza się również, że jest to dokładnie liczba znaków w ciągu. Ale jeśli zwrócimy to samo słowo z kolumny w bazie danych, możemy otrzymać inny wynik. Na przykład to:
SELECT ArtistName, DATALENGTH(ArtistName) AS DataLength FROM Artists WHERE ArtistName = 'Lit';
Wynik:
ArtistName DataLength ---------- ---------- Lit 6
W tym przypadku długość danych wynosi 6.
Powodem tego jest to, że w tej konkretnej bazie danych kolumna ma nvarchar(255) typ danych. nvarchar typ danych to ciąg Unicode, który przechowuje 2 bajty na znak (co skutecznie podwaja długość danych). Gdyby zamiast tego w kolumnie użyto varchar(255) miałby długość danych równą 3. Jednak gdyby powiedział, char(25) ciąg miałby długość danych 25.
Ponadto, jeśli wcześniej był to char(25) ale następnie został przekonwertowany na varchar(255) nadal miałby długość danych 255.
Jednak we wszystkich przypadkach LEN()
funkcja zwróciłaby 3.
Bluzy końcowe
DATALENGTH()
funkcja zlicza końcowe spacje (np. spacje na końcu ciągu, tabulatory, powrót karetki itp.).
Przykład:
SELECT DATALENGTH('Lit ');
Wynik:
4
W tym przykładzie po prostu dodałem spację na końcu ciągu. To kolejna różnica między LEN()
i DATALENGTH()
.
Możesz zobaczyć przykłady LEN()
i DATALENGTH()
obok siebie w LEN()
vs DATALENGTH()
.
Typ zwrotu
DATALENGTH()
funkcja zwraca typ danych int , chyba że wyrażenie to varchar(max) , nvarchar(maks.) lub zmienna (maks.) , w takim przypadku zwraca bigint .