SQL Server ile ilgili her şey.

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

S

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

Yazar Hakkında

Yavuz Selim Kart

SQL Server tarafında kendini ilerletmeye çalışırken bildiklerini sürekli başkalarına aktaran, yazılım dünyasında (C#, Java, Python vb.) kendini güncel tutmaya çalışan, araştırma yapmaktan bıkmayan, meraklı, bilginin üzerine bilgi katmaktan mutluluk duyan bir yazılım eğitmeni ve kod sever.
Grafik tasarım dünyasında Indesign'ı anlatacak kadar iyi kullanabilen, Photoshop ve Illustrator'e de orta düzey hakimiyeti bulunan, internet üzerinde online kimya dergisi kurmuş ve bunu yüzbinlerce kişiye ulaştırmayı başaran bir grafik sever.
WordPress tarafında 5 adet web sitesi kurmuş, bu sistemler üzerine çalışan bir WordPress sever.
Sosyal medya üzerinde okumalara ve araştırmalara devam eden, kendi kurmuş olduğu kimya dergisini daha çok kişiye nasıl ulaştırırım diye düşünen ve bu konuda SEO çalışmaları üzerine kafa yoran bir Sosyal Medya sever.
Kısaca çok çalışmayı seven, azimli biriyim.

Yavuz Selim Kart
SQL Server ile ilgili her şey.

Yazar

Yavuz Selim Kart

SQL Server tarafında kendini ilerletmeye çalışırken bildiklerini sürekli başkalarına aktaran, yazılım dünyasında (C#, Java, Python vb.) kendini güncel tutmaya çalışan, araştırma yapmaktan bıkmayan, meraklı, bilginin üzerine bilgi katmaktan mutluluk duyan bir yazılım eğitmeni ve kod sever.
Grafik tasarım dünyasında Indesign'ı anlatacak kadar iyi kullanabilen, Photoshop ve Illustrator'e de orta düzey hakimiyeti bulunan, internet üzerinde online kimya dergisi kurmuş ve bunu yüzbinlerce kişiye ulaştırmayı başaran bir grafik sever.
WordPress tarafında 5 adet web sitesi kurmuş, bu sistemler üzerine çalışan bir WordPress sever.
Sosyal medya üzerinde okumalara ve araştırmalara devam eden, kendi kurmuş olduğu kimya dergisini daha çok kişiye nasıl ulaştırırım diye düşünen ve bu konuda SEO çalışmaları üzerine kafa yoran bir Sosyal Medya sever.
Kısaca çok çalışmayı seven, azimli biriyim.