# PostgreSQL’den Sayıları Çıkarma: Tam Bir Kılavuz
PostgreSQL veritabanınızda metin sütunlarında saklı sayıları ayıklamaya mı çalışıyorsunuz? Örneğin, bir müşteri yorumunda gizli bir puan veya bir ürün tanımında gömülü bir fiyat mı bulmanız gerekiyor? Bu makale, PostgreSQL’de metinlerden sayıları çıkarmak için adım adım bir rehber sunuyor. Yeni başlayanlardan ileri seviye kullanıcılara kadar herkes için pratik örnekler ve performans optimizasyon ipuçları bulacaksınız. PostgreSQL’in güçlü düzenli ifade (regex) yeteneklerini kullanarak, karmaşık metinlerden bile sayıları güvenilir bir şekilde ayıklamayı öğreneceksiniz.
PostgreSQL’den Sayıları Nasıl Çıkartabilirim? – Öğrenme Yol Haritası
Bu rehber, PostgreSQL’de metinlerden sayı çıkarmayı adım adım öğretmek için tasarlanmıştır. Üç seviyeye ayırdığımız bu yol haritası, yeteneklerinize uygun bir öğrenme deneyimi sunar:
Yeni Başlayan: Basit substring ve regexp_replace fonksiyonları ile başlangıç seviyesi örnekler.
Orta: Gerçek dünya senaryoları, daha karmaşık düzenli ifadeler ve performans optimizasyon ipuçları.
İleri Düzey: Performans analizi, edge case’ler ve karmaşık düzenli ifade optimizasyonu.
Temel Kavramlar: PostgreSQL ve Düzenli İfadeler
PostgreSQL, güçlü bir açık kaynak ilişkisel veritabanı yönetim sistemidir. Metin işleme yetenekleri, özellikle düzenli ifadeler (regex) kullanımıyla, verilerden bilgi çıkarmayı oldukça kolaylaştırır. Düzenli ifadeler, metin desenlerini tanımlamak ve eşleştirmek için kullanılan bir karakter dizisi modelidir. PostgreSQL, regexp_matches, regexp_replace ve substring gibi fonksiyonlar aracılığıyla düzenli ifadeleri destekler. Bu fonksiyonlar, metin içindeki belirli sayısal değerleri bulmamıza ve ayıklamamıza olanak tanır.
PostgreSQL’de Sayıları Çıkarma: Adım Adım Uygulama
Yeni Başlayan: Basit Durumlar
Örneğin, “Ürün Kodu: 12345, Fiyat: 99.99 TL” şeklinde bir metin sütunumuz olsun. Sadece sayıları ayıklamak için basit substring fonksiyonunu kullanabiliriz:
SELECT substring('Ürün Kodu: 12345, Fiyat: 99.99 TL' FROM '[0-9]+') AS number;
Bu sorgu, metin içindeki ilk sayısal diziyi (“12345”) döndürür. Daha fazla sayı ayıklamak için daha karmaşık yöntemlere ihtiyaç duyacağız. Bu yöntem tüm sayıları ayıklayamaz.
Orta Seviye: Daha Karmaşık Metinler ve regexp_matches
Şimdi daha karmaşık bir senaryo ele alalım. Bir müşteri yorumu sütunumuz olsun ve bu sütun içinde puanlar gizli olsun: “Ürün harika! 5/5 yıldız veriyorum. Kesinlikle tavsiye ederim.” Bu durumda, regexp_matches fonksiyonu ve daha gelişmiş düzenli ifadeler kullanmamız gerekir:
SELECT regexp_matches('Ürün harika! 5/5 yıldız veriyorum. Kesinlikle tavsiye ederim.', '\d+') AS numbers;
Bu sorgu, metin içindeki tüm sayısal dizileri bir dizi olarak döndürür: {{5},{5}}. Bu diziyi daha sonra işleyerek puan değerlerini elde edebiliriz. Daha da spesifik olmak için düzenli ifadeyi geliştirebiliriz: (\d+)/(\d+) Bu ifade, / ile ayrılmış iki sayısal diziyi yakalar ve her birini ayrı bir grup olarak döndürür.
İleri Seviye: Performans Optimizasyonu ve Edge Case’ler
Çok büyük miktarda veriyle çalışırken, performans kritik önem taşır. Karmaşık düzenli ifadeler performansı olumsuz etkileyebilir. Bu nedenle, mümkün olduğunca basit ve spesifik düzenli ifadeler kullanmaya özen göstermeliyiz. İndeksleme de performansı artırmada önemli rol oynar. Eğer mümkünse, sayısal verileri ayrı bir sütunda tutmak daha verimli olacaktır.
Edge case’ler de göz önünde bulundurulmalıdır. Örneğin, virgül içeren sayılar (1.234,56) veya negatif sayılar (-10) gibi durumlar için düzenli ifadelerimizi güncellememiz gerekebilir. Aşağıdaki düzenli ifade, virgül ve nokta içeren sayıları da yakalar:
SELECT regexp_matches('Fiyat: 1.234,56 TL', '[-+]?[0-9]*[.,]?[0-9]+') AS numbers;
Gerçek Dünya Senaryoları ve Vaka Analizleri
Senaryo 1: E-ticaret Ürün Katalogu: Bir e-ticaret sitesinin ürün katalogunda, ürün isimlerinde fiyat bilgisi bulunmaktadır (örneğin: “Samsung Galaxy S23 16GB 15.999 TL”). regexp_matches fonksiyonu ve uygun bir düzenli ifade kullanarak, ürün isimlerinden fiyat bilgilerini ayıklayabiliriz ve ayrı bir fiyat sütununa kaydedebiliriz.
Senaryo 2: Sosyal Medya Analizi: Sosyal medya gönderilerinde belirli bir hashtag’e (#indirim) sahip gönderilerdeki indirim yüzdelerini ayıklamak için düzenli ifadeler kullanılabilir. Örneğin, “%20 indirim” gibi ifadelerden “%20” değerini ayıklayabiliriz.
PostgreSQL Sayı Çıkarma Fonksiyonları Karşılaştırması
substring, regexp_matches, ve regexp_replace fonksiyonlarının her birinin kendine özgü avantajları ve dezavantajları vardır. substring basit durumlarda kullanışlıdır ancak karmaşık desenler için yetersiz kalır. regexp_matches karmaşık desenleri yakalamak için idealdir ancak performans açısından daha maliyetli olabilir. regexp_replace ise metinden istenmeyen kısımları kaldırmak için idealdir. Doğru fonksiyonun seçimi, verilerin yapısına ve performans gereksinimlerine bağlıdır.
Sonuç
PostgreSQL, metinlerden sayıları ayıklamak için güçlü araçlar sunar. Bu makalede ele aldığımız yöntemler, basit durumlardan karmaşık senaryolara kadar çeşitli ihtiyaçları karşılayabilir. Ancak, performans optimizasyonu ve edge case’lerin dikkate alınması, başarılı bir uygulama için kritik öneme sahiptir. Uygun düzenli ifadeleri kullanarak ve veritabanı tasarımınızı optimize ederek, PostgreSQL’den verimli bir şekilde sayısal verileri çıkarabilirsiniz.
Sıkça Sorulan Sorular:
1. PostgreSQL’de düzenli ifadeler nasıl kullanılır? PostgreSQL, regexp_matches, regexp_replace gibi fonksiyonlar aracılığıyla düzenli ifadeleri destekler. Bu fonksiyonlar, metin içindeki belirli desenleri bulmak ve değiştirmek için kullanılır.
2. Çok büyük veri kümeleri için performansı nasıl optimize edebilirim? Basit ve spesifik düzenli ifadeler kullanın, indekslemeyi göz önünde bulundurun ve mümkünse sayısal verileri ayrı bir sütunda saklayın.
3. Negatif sayıları nasıl ayıklarım? Düzenli ifadelerde [-+]? ifadesini kullanarak negatif veya pozitif sayıları yakalayabilirsiniz.
4. Virgül içeren sayıları nasıl işlerim? Düzenli ifadelerde [.,] ifadesini kullanarak virgül veya nokta içeren sayıları yakalayabilirsiniz.
5. Hangi düzenli ifade fonksiyonunu kullanmalıyım? Veri yapısına ve karmaşıklığa bağlı olarak substring, regexp_matches veya regexp_replace fonksiyonlarından birini seçebilirsiniz.
Yazar: Fatih Soysal
