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'tir.
	LEN(@Test)
   ,            --11 Karakter sayısını döner. 
	LEN(@TestChar)
   ,        --11 Karakter sayısını döner.                                                                                                               
	DATALENGTH(@TestChar); --Kullanılan byte sayısı 20'dir

İ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) = N'Selim';
SELECT
	LEN(@Name) AS 'LEN Unicode icin';
DECLARE @Name2 NVARCHAR(50) = N'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) = N'Selim ';
SELECT
	LEN(@Ad) AS 'LEN Unicode icin Bosluklu';
DECLARE @Soyad NVARCHAR(50) = N'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.

724 Kez Okundu

Yavuz Selim Kart

Yazılım ve veri tabanında bildiklerimi anlatmaya gayret ediyorum. Halen birçok programlama dili üzerinde araştırmalar yaparak kendimi geliştiriyorum. Bunlar haricinde Grafik Tasarım ve Wordpress konularına da ilgim bulunmakta. SEO ve Sosyal medya yönetimleri hakkında da bilgim mevcuttur. Kısaca çok çalışmayı seven azimli biriyim.

You may also like...

Yazı kopyalamak yasaktır!