Mysql de | (pipe) ile birleştirilmiş sahaları ayıklamak

Standard

Herkese selam,

Yine yeni bir makale ile sizlerleyim.. Bugün yine mysql ile ilgili bir konuda yardımcı olmaya çalışacağım sizlere..

Elinize bir veritabanı geldi diyelim. Burada programcı dataları tek kolonda pipe ( | ) ile veya başka özel karakterler ile birleştirerek saklamayı tercih etmiş diyelim.

Siz de tüm sahayı seçmek yerine içinden bir kısım almak istiyorsunuz diyelim. Bunun için size 2 yöntem göstereceğim.

1- Zaten tanımlı olan SUBSTRING_INDEX fonksiyonunu kullanarak çözebilirsiniz.

Önce bu yolu ile ele alalım..

imap isimli bir field olduğunu varsayalım ve bu alan içinde değerler “10.12345||20.54321||12||buradaki adresi almak istiyoruz” şeklinde tutulsun..

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(imap, '||', 4), '||', -1) FROM tablom

Gayet açık şekilde parçaladık ve sonucunda direk adresi aldık gördüğünüz gibi..

2- Şimdi sıra 2. yöntemde.. Mysql de kendiniz bir fonksiyon yazabilirsiniz.
Bu konuda detaylı bilgiye erişmek isterseniz mysql sitesindeki user defined function başlığına bakabilirsiniz.

Şimdi de kendi fonksiyonunuzu tanımlamayı göstermek istiyorum sizlere..

CREATE FUNCTION PARCALA(
  str VARCHAR(255),
  delimit VARCHAR(12),
  pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(str, delimit, pos),
       LENGTH(SUBSTRING_INDEX(str, delimit, pos -1)) + 1),
       delimit, '');

Yukarıda gördüğünüz gibi fonksiyonumuzu tanımladım.

Şimdi bunu nasıl kullanacağız onu göstermek istiyorum

SELECT PARCALA(imap,"||",3) FROM cpoi

Gördüğünüz gibi direk adres gelecektir.

Tabi benim size önerim kendiniz fonksiyon tanımlamak yerine ilk göstermiş olduğum yöntemi kullanmanız.. Ama çeşitli şekillerde çeşitli işlemler için kullanabilirsiniz sadece size fikir olsun istedim..

İyi çalışmalar dilerim..

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir