13 Ocak 2011

MySQL için split fonksiyonu

ile hasan

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 olsa diye düşündüm. MySQL’de yokmuş ama basit bir formülle kazandırılabiliyormuş. İşte MySQL için split fonksiyonu:

CREATE FUNCTION SPLIT_STR(
  x VARCHAR(255),
  delim VARCHAR(12),
  pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
       CHAR_LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
       delim, '');

Bu fonksiyonu şu şekilde kullanabiliyoruz:

select split_str(isim,’ ‘,1);

Yukarıdaki select ifadesinde isim hanesini boşluklarından ayırmasını ve ilk kelimeyi yazmasını sağlamış olduk.