SQL Server’da Len ve Datalength Fonksiyonları Arasındaki Farklar

Herkese merhaba,

Bu başlık altında SQL Server’da Len ve Datalength fonksiyonları arasındaki farkları inceleyeceğiz.

  1. Len fonksiyonu belirtilen dize ifadesindeki karakter sayısını döndürürken, Datalength fonksiyonu kullanılan byte sayısını döndürür.
  2. Len fonksiyonu karakter sayısını hesaplarken takip eden boşlukları hariç tutar, Datalength fonksiyonu kullanılan bayt sayısını hesaplarken izleyen boş alanları da hesaplar.
  3. Len fonksiyonu her zaman karakter sayısını sayarken Unicode olup olmadığına bakmaz, Datalength fonksiyonu ise Unicode karakterler için 2 ile çarparak hesaplama işlemini yapar.
  4. Text, Ntext ve Image veri tiplerinde Len fonksiyonu kullanılamazken Datalength fonksiyonu kullanılabilir.

Konuyu daha iyi anlamak adına örnekler yapalım.

Örnek 1 

DECLARE @Test VARCHAR(20) = ' yavuzselim    ';
DECLARE @TestChar CHAR(20) = ' yavuzselim    ';

SELECT  DATALENGTH(@Test) , --Kullanılan byte sayısı 15
        LEN(@Test) , --Karakter sayısını döner 11
        LEN(@TestChar) , --Karakter sayısını döner 11
        DATALENGTH(@TestChar)  --Kullanılan byte sayısı 20

İlk örnekte görüldüğü üzere Varchar(20) veri girilmesinin de etkisi ile Datalength fonksiyonunda 15 byte’lık bir dönüş işlemi yaptı. Len fonksiyonu her iki ifade için de 11 byte bir ifade döndü. Char(20) veri girilmesinin de etkisi ile Datalength fonksiyonu 20 byte’lık bir hesaplama yaptı. Çünkü Char veri tipinde 5 karakterde girseniz 20 birimlik bir alan açılır.

Örnek 2

SELECT LEN('yavuzselim     ')  
 AS 'LEN'

 SELECT DATALENGTH('yavuzselim     ') 
 AS 'DATALENGTH'

Görüldüğü üzere Len fonksiyonu hesaplamada boşlukları saymadığı için 10 byte’lık bir sonuç bize döndürecektir. Datalength fonksiyonu ise boşlukları da dahil ederek bize 15 byte’lık bir sonuç döndürecektir.

Örnek 3

SELECT LEN(N'Yavuz') AS
 'LEN Sonuc'

 SELECT DATALENGTH(N'Yavuz') AS
 'DATALENGTH Sonuc'

Görüldüğü üzere Len fonksiyonu Unicode olup olmadığına bakmaz. Bize 5 byte’lık bir sonuç döndürür. Datalength fonksiyonu ise bize 10 byte’lık bir sonuç döndürecektir.

Örnek 4

DECLARE @Name NVARCHAR(50) 
 = 'Selim'
SELECT LEN(@Name) AS
 'LEN Unicode icin'

 DECLARE @Name2 NVARCHAR(50)
 = 'Selim'
SELECT DATALENGTH(@Name2) AS
 'DATALENGTH Unicode icin'

Görüldüğü üzere Len fonksiyonu Unicode karakter olup olmadığını bakmaksızın bize girilen değer kadar sonuç döndürdü. Datalength fonksiyonu ise Unicode karakter olduğunuz göz önünde bulundurarak bize 10 byte’lık bir sonuç döndürdü.

Örnek 5

DECLARE @Ad NVARCHAR(50) 
 = 'Selim     '
SELECT LEN(@Ad) AS
 'LEN Unicode icin Bosluklu'

 DECLARE @Soyad NVARCHAR(50)
 = 'Selim     '
SELECT DATALENGTH(@Soyad) AS
 'DATALENGTH Unicode icin Bosluklu'

Görüldüğü üzere Len fonksiyonu Unicode karakter olup olmadığını bakmaksızın bize girilen değer kadar sonuç döndürdü. Boşluk ifadelerini Len fonksiyonu saymadı ve 5 byte’lık sonuç karşımıza geldi. Datalength fonksiyonu ise Unicode karakter olduğunu göz önünde bulundurarak ve boşluk değerlerini de sayarak bize 20 byte’lık bir sonuç döndürdü.

Örnek 6

DECLARE @Customer TABLE
(TextColumn TEXT)
 
INSERT INTO @Customer
VALUES('100')
 
SELECT LEN(TextColumn) AS 'LEN'
FROM @Customer


DECLARE @Musteri TABLE
(YaziSatiri TEXT)
 
INSERT INTO @Musteri
VALUES('100')
 
SELECT DATALENGTH(YaziSatiri)
  AS 'DATALENGTH'
FROM @Musteri

Görüldüğü üzere Len fonksiyonunu text veri tiplerinde kullanamazken Datalength fonksiyonunu text veri tipinde başarı ile kullanıp sonucu alabiliyoruz.

Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.

SQL Server Eğitimleri Kanalına Abone Olun

Şunlar makaleler de hoşunuza gidebilir

Ads Blocker Image Powered by Code Help Pro
Reklam Eklentisi Kullanıyorsunuz

Lütfen bizlere destek için reklam eklentisi olmadan sitemizi ziyaret edin.

Şimdiden teşekkür ederiz.