Anasayfa / Yazılım / SQL / LEN ve DATALENGTH Fonksiyonları

LEN ve DATALENGTH Fonksiyonları

LEN fonksiyonu ile string bir verinin karakter sayısını elde edebiliriz. Birde LEN ile çok karıştırılan DATALENGTH fonksiyonu vardır. Bu fonksiyon aslında string bir verinin byte sayısını döndürür. Yani veri uzunluğunun byte olarak ölçülmesi ile alakalıdır. Bu ikisi zaman zaman birbirinin yerine kullanılırlar ancak CHAR ve VARCHAR tipindeki string verilerde aynı sonuçları dönerken, NCHAR ve NVARCHAR tipindeki string verilerde aynı sonuçları dönmezler. Örnekleyerek açıklayayım. Diyelim ki, 4 tipte stringimiz olsun.

AHMET – CHAR tipinde
MEHMET – VARCHAR tipinde
İSMAİL – NCHAR tipinde
ŞEMSİ – NVARCHAR tipinde

Bu 4 veri için sırası ile LEN ve DATALENGTH dediğimizde

AHMET için LEN = 5 , DATALENGTH = 5;
MEHMET için LEN = 6, DATALENGTH = 6;
İSMAİL için LEN = 6, DATALENGTH = 12;
ŞEMSİ için LEN = 5, DATALENGTH = 10 değerlerini döner.

Nedeni ise şu, DATALENGTH CHAR ve VARCHAR tiplerinde yer alan her karakter için 1 byte hesaplarken, NCHAR ve NVARCHAR tipindeki string verilerin her bir karakteri için 2 byte hesaplaması yapar. Dolayısı ile LEN ve DATALENGTH kullanımını karıştırmamız gerekmektedir.

Şimdi AdventureWorks veritabanında Person.Person alanı üzerinde LastName ve FirstName kolonlarının LEN ve DATALENGTH sonuçlarını listeleyelim.

SELECT FirstName, LEN(FirstName) AS "Karakter Uzunluğu",
DATALENGTH(FirstName) AS "Veri Uzunluğu",
LastName, LEN(LastName) AS "Karakter Uzunluğu",
DATALENGTH(LastName) AS "Veri Uzunluğu"
FROM Person.Person

020101

Bir yorum

  1. Mehmet Ali Kırşan

    Sayın Gürsoy,

    Verdiğiniz bu karakter uzunluğu fonksiyonuyla mysql da şartlı bir replace update veya INSERT INTO ile veri girmek mümkün mü ?

    örneğin; wp olan sitemde bulunan bütün postların “1000 karakter” sayısının hemen ardından “bu yazı eklensin” diye bir sql sorgusu yapmak mümkün mü ? Bu sorgu için bir örnek verebilirmisiniz ?

    Değerli vaktinizi ayırıp yanıtlarsanız müteşekkir olacağım.

    Saygılar.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir