"Enter"a basıp içeriğe geçin

Etiket: mysql split_str

Mysql için count_str() “kelimedeki karakterin adedi” fonksiyonu

Bir önceki yazıda MySQL için split_str() fonksiyonunu oluşturmuştuk. Kelimeleri verdiğimiz karaktere göre bölüyordu. Amacımız; ad ve soyad değerleri tek bir sütunda isim olarak verildiğinde bu isim bilgisinden ad ve soyadı ayrıştırabilmek idi. split_str() fonksiyonu datayı istediğimiz karaktere göre (örneğin boşluk karakteri) bölebiliyor ve ortaya çıkan gruplardan hangisini görmek istiyorsak onu almamızı sağlıyor. Ama problemimiz için bu yeterli değil. Çünkü isimler her zaman “Fehim Tabak” gibi bir ad ve bir soyaddan oluşmuyor. İki ad ve bir soyad, hatta kulakları çınlasın sevgili arkadaşım “Yusuf Ziya Bektaş Köseoğlu” gibi üç ad ve bir soyad da olabiliyor. Böyle bir bilgiden soyadı ve adı ayrıştırabilmek için “en son kelime soyaddır” ve “en son kelime hariç diğerleri addır” diyebilmek gerek. Aşağıda yazacağımız count_str() fonksiyonu işte bu noktada devreye giriyor.

CREATE FUNCTION COUNT_STR(
x VARCHAR(255),
delim VARCHAR(12)
)
RETURNS INT
RETURN LENGTH(x)-LENGTH(REPLACE(x,delim,”));

Bu fonksiyon parametre olarak verdiğimiz karakterin yine parametre olarak verdiğimiz kelimenin içerisinde kaç kere geçtiğini döndürüyor. Boşluk ‘ ‘ karakteri ilgili alanda kaç kere var diye kullanırsak ‘Fehim Tabak’ için 1, ‘Yusuf Ziya Bektaş Köseoğlu’ için 3 döndürür. Bu sayının bir fazlası bize o alanda kaç kelimelik bir bilgi olduğunu yani ismin kaç kelimeden oluştuğunu döndürür.

MySQL için split fonksiyonu

Excel’den aldığım bir veriyi hazırladığım bir tabloya aktarmam gerekiyordu. Tablomda ad ve soyad sütunları ayrı ayrı olacak şekilde tasarlanmıştı ama aktarmak istediğim Excel dosyasında isim olarak tek sütun vardı. İlk iş olarak Excel dosyasını phpmyadmin yardımıyla komple bir tablo olarak veritabanına yükledim. Aktarma için kaynak tablodan select yapıp hedef tabloya insert uygulayacaktım ama bu ad, soyad sütunlarının ayrı ayrı olması işi biraz bozdu. Kaynak tablodan select yaparken isim sütunundaki veriyi kelimeler arasındaki boşluklardan yakalayıp ad ve soyadını soyadını ordan ayrı ayrı yakalamak icab ediyordu. PHP’de bu tarz bir parçalama işlemini explode() fonksiyonu ile yapmaya alışmış biri olarak keşke MySQL’de de…