В SQL Server (и Azure), T-SQL DATALENGTH()
функцията връща броя на байтовете, използвани за представяне на произволен израз.
Например:
SELECT DATALENGTH('Lit');
Резултат:
3
В този случай има 3 байта в низа Lit
.
Това обаче е прост пример. Резултатите могат да изглеждат много различно в зависимост от типа данни.
В горния пример видяхме, че има 3 байта в думата Lit
. Това също се случва да е точно колко знака има в низа. Но ако върнем същата дума от колона в база данни, може да получим различен резултат. Например това:
SELECT ArtistName, DATALENGTH(ArtistName) AS DataLength FROM Artists WHERE ArtistName = 'Lit';
Резултат:
ArtistName DataLength ---------- ---------- Lit 6
В този случай дължината на данните е 6.
Причината за това е, защото в тази конкретна база данни колоната има nvarchar(255) тип данни. nvarchar Типът данни е низ от Unicode, който съхранява 2 байта на знак (което ефективно удвоява дължината на данните). Ако вместо това колоната е използвала varchar(255) той ще има дължина на данните от 3. Ако обаче имаше да кажем, char(25) низът ще има дължина на данните от 25.
Освен това, ако преди това е бил char(25) но след това беше преобразуван в varchar(255) тя пак ще има дължина на данните от 255.
Въпреки това, във всички случаи, LEN()
функцията би върнала 3.
Завършващи празни места
DATALENGTH()
функцията брои крайните празни места (напр. интервали в края на низа, табулатори, връщане на карета и т.н.).
Пример:
SELECT DATALENGTH('Lit');
Резултат:
4
В този пример просто добавих интервал в края на низа. Това е още една от разликите между LEN()
и DATALENGTH()
.
Можете да видите примери за LEN()
и DATALENGTH()
един до друг в LEN()
срещу DATALENGTH()
.
Тип връщане
DATALENGTH()
функцията връща тип данни int , освен ако изразът е varchar(max) , nvarchar(max) или варбинарна(макс.) , като в този случай се връща bigint .