Ana içeriğe geç

SQL Dize Fonksiyonları: Yeni Başlayanlar için Kılavuz

Metin verilerini verimli bir şekilde temizlemek ve işlemek için SQL Dize Fonksiyonlarını nasıl kullanacağınızı anlayın.
· 7 dk. oku

Yapay Zeka ile Keşfedin

İlişkisel veritabanlarıyla çalışırken sıklıkla dağınık verilerle uğraşmanız gerekir. En yaygın zorluklardan biri, metin verilerini temizlemek ve işlemektir. Neyse ki SQL, bu süreci çok daha verimli hale getirerek zamandan ve emekten tasarruf etmenizi sağlayan güçlü dize fonksiyonları sunar.

Bu yazıda, metin verilerini kolayca temizlemenize ve düzenlemenize yardımcı olacak en önemli SQL dize fonksiyonlarını inceleyeceğiz. Haydi başlayalım!

SQL Dize Fonksiyonları Nelerdir?

SQL Dize Fonksiyonları, bir veritabanında saklanan metin verilerini düzenlememizi ve işlememizi sağlayan yerleşik fonksiyonlardır. Metin alanlarına yaygın örnekler olarak isimler, açıklamalar ve adresler verilebilir.

Bu fonksiyonlar, aşağıdakiler de dahil olmak üzere geniş bir yelpazede görevler için kullanılabilir:

  • Dizeleri birleştirme
  • Metni biçimlendirme
  • Bir dizenin parçalarını çıkarma
  • Bir dize içinde belirli metni arayıp değiştirme

SQL'de Dizeleri Birleştirme

concat() fonksiyonunu kullanarak iki veya daha fazla dizeyi birleştirebiliriz:

SELECT CONCAT('Street Roma',', ','72',', ','Padova') AS full_address

Çıktı şöyledir:

full_address           |
-----------------------+
Street Roma, 72, Padova|

Bu fonksiyon, isimler ve adresler gibi farklı sütunlardan gelen bilgileri birleştirmek için yaygın olarak kullanılır.

Alternatif olarak, CONCAT_WS() fonksiyonunu da kullanabilirsiniz:

SELECT CONCAT_WS(',','Street Roma','72','Padova') as full_address

Sözdiziminden de görebileceğiniz gibi, aynı ayırıcıyla ikiden fazla sütunu birleştirmek istediğiniz durumlarda daha kolay ve etkilidir.

Metni Biçimlendirme

Büyük/küçük harf dönüşümü, fazla boşlukların kaldırılması ve diğer işlemlerle metni ayarlamak için çeşitli SQL dize fonksiyonları vardır. Her bir fonksiyon, sözdizimi ve açıklamasıyla birlikte listelenmiştir.

Fonksiyon Sözdizimi

Açıklama

LOWER(string)

Metni tüm karakterleri küçük harfe çevrilmiş olarak döndürür

UPPER(string)

Metni tüm karakterleri büyük harfe çevrilmiş olarak döndürür

 TRIM(string, [character])

Varsayılan olarak dizenin sol ve sağından boşlukları, belirtilirse özel karakteri kaldırır

LTRIM(string, [character])

Varsayılan olarak dizenin solundan boşlukları, belirtilirse özel karakteri kaldırır

RTRIM(string, [character])

Varsayılan olarak dizenin sağından boşlukları, belirtilirse özel karakteri kaldırır

Şimdi, bu fonksiyonların nasıl uygulanacağını anlamak için bazı örnekler gösterelim. Büyük harfler içeren e-posta adresleriniz ve küçük harfli ülke kısaltmalarınız olduğunu ve bu sütunların biçimini düzeltmek istediğinizi düşünün.

SELECT
		LOWER('[email protected]') AS email,
		UPPER('it') AS country

 Çıktı şu şekildedir:

email              |country|
-------------------+-------+
anonymous@gmail.com|IT     |

Büyük/küçük harf dönüşümüne ek olarak, dizelerin başındaki veya sonundaki boşluklardan kurtulmak da faydalı olabilir. Bu tür işlemler için temel fonksiyon, her iki taraftan da kaldırma yapan TRIM() dir. Diğer alternatifler ise sırasıyla sol ve sağ taraftan boşlukları silmek için LTRIM() ve RTRIM() fonksiyonlarıdır:

SELECT  TRIM(' Street Roma, 72 ') AS trimmed_address,
	  LTRIM(' Street Roma, 72 ') AS ltrimmed_address,
	  RTRIM(' Street Roma, 72 ') AS rtrimmed_address

Sorgu aşağıdaki sonucu döndürür:

trimmed_address|ltrimmed_address|rtrimmed_address|
---------------+----------------+----------------+
Street Roma, 72|Street Roma, 72 | Street Roma, 72|

Çıktıdan, her bir fonksiyon arasındaki farkları görebilirsiniz. Ayrıca, TRIM() beyaz boşlukların yanı sıra diğer özel karakterleri kaldırmak için de kullanılabilir. Örneğin, telefon alanını + işaretinden arındırmak istediğimizi düşünelim:

SELECT TRIM('++345','+') AS telephone

Dönen çıktı aşağıdaki gibidir:

telephone|
---------+
345      |

Gördüğünüz gibi, telefon numarası tamamen temizlendi.

Metin Çıkarma

Dizeleri birleştirip biçimlerini düzenledikten sonra, özel SQL fonksiyonu SUBSTRING() kullanarak metni nasıl çıkaracağımızı keşfetme zamanı. Bu fonksiyonu öğrenmek için farklı örnekler gösterelim:

SELECT
		SUBSTRING('Antony',1,1) AS first_character, 
		SUBSTRING('Antony',1,3) AS first_3characters,
		SUBSTRING('Antony',1,5) AS first_5characters

Çıktı şöyledir:

first_character|first_3characters|first_5characters|
---------------+-----------------+-----------------+
A              |Ant              |Anton            |

Bu fonksiyonu önceki fonksiyonlarla da birleştirerek ilk karakteri büyük harfe dönüştürüp kalan harfleri küçük harfe çevirebilir ve ardından tüm harfleri birleştirebiliriz:

SELECT
LENGTH('antony') AS lenght_name,
SUBSTRING(UPPER('antony'),1,1) AS first_character,
SUBSTRING(LOWER('antony'),2,LENGTH('antony')) AS  last_characters,
CONCAT(SUBSTRING(UPPER('antony'),1,1),SUBSTRING(LOWER('antony'),
      2,LENGTH('antony'))) AS name

Bu sorgu aşağıdaki sonucu döndürür:

lenght_name|first_character|LAST_characters|name  |
-----------+---------------+---------------+------+
          6|A              |ntony          |Antony|

Buraya kadar gördüğümüz fonksiyonlara ek olarak, dizenin uzunluğunu çıkarmaya yarayan LENGTH() fonksiyonunu da görebilirsiniz. Bu bağlamda, son karakterin indeksini belirtmek için kullanışlıdır.

SQL'de Dizeleri Arama ve Değiştirme

Dizeleri aramak ve değiştirmek için en temel fonksiyonları gösterebiliriz:

Fonksiyon Sözdizimi

Açıklama

REPLACE(string,x,y)

Dizedeki x değerini y değeriyle değiştirir

CHARINDEX(x,string)

x değerinin dize içindeki konumunu bulur

Bir alt dizeyi, dizenin içinde başka bir alt dizeyle değiştirmek için çok kullanışlı bir fonksiyon REPLACE()'tir:

SELECT
		'Street Roma - 32' AS address,
		replace('Street Roma - 32','-',',') AS cleaned_address

Çıktı şöyledir:

address         |cleaned_address |
----------------+----------------+
Street Roma - 32|Street Roma , 32|

Bu örnekte, adresteki kısa çizgiyi virgülle değiştirdik. Ayrıca, kısa çizginin adresteki konumunu bulmayı da deneyebiliriz:

SELECT
		'Street Roma - 32' AS address,
		LENGTH('Street Roma - 32') AS length_address,
		CHARINDEX('-','Street Roma - 32') AS location_dash

Sorgu aşağıdaki sonucu döndürür:

address         |length_address|location_dash|
----------------+--------------+-------------+
Street Roma - 32|            16|           13|

Görüyoruz ki - sembolü adresin 13. konumunda, yani dizenin çoğunlukla sonunda yer alıyor.

Sonuç

Bu SQL dize fonksiyonlarına hâkim olmak, verileri verimli şekilde temizlemede fark yaratabilir. Elbette bu yazı tüm fonksiyonları kapsamıyor; yalnızca en önemli fonksiyonların kısa bir listesini sunuyor. Tüm SQL fonksiyonları her zaman geçerli değildir ve kullandığınız veritabanı türüne göre değişebilir. Örneğin, MySQL veritabanında CHARINDEX yerine LOCATE() kullanılabilir. 

Bu fonksiyonları pratik etmek için SQL'de Raporlama Kursumuza göz atabilirsiniz. Verileri temizleme ve karmaşık raporlar oluşturma konusunda uzmanlaşmanıza yardımcı olabilir. Ayrıca, SQL'in temel yönlerini kapsamak için SQL Temelleri beceri yolunu da öneririz.

Eugenia Anello

Yazar

Eugenia Anello

Veri Bilimci - CRIF

Konular

İlgili