T-SQL’de ile kolon içeriğini ayrı kolonlar haline yazma

T-SQl kolonlara ayırma

SQL Server ile veritabanında bulunan bir tabloda yer alan karakter dizisi (string, varchar) şeklindeki bir sütunun içeriğini parçalara bölüm ayrı kolon olarak yazabiliriz. Bunun için T-SQL’de yer alan PATINDEX fonksiyonunu ve basit birkaç SQL ifadesi kullanmamız yeterli oluyor.

PATINDEX için Microsoft dokümantasyonunu inceleyebilirsiniz:

https://learn.microsoft.com/en-us/sql/t-sql/functions/patindex-transact-sql?view=sql-server-ver16

Farklı uygulamalarda Regular Expressions ile bu şekilde işlemler yapılabiliyor tabii ki. Benzer işlemin basitçe SQL ile nasıl yapıldığına bakalım.

Örneğin bir kolon içinde başlangıç zamanı, bitiş zamanı ve örnek değer gibi üç verinin bir arada – belli bir formatta – tutulduğunu düşünelim.

StartTime:05.12.2022 10:00:00 EndTime:05.12.2022 10:15:23 SampleValue:120

Bu kolon içeriğinde geçen StartTime, EndTime ve SampleValue sabit değerler. Bu değerlerin konumlarına göre karşılık gelen tarih ve sayıları almak için PATINDEX ile her birinin konumunu indeks değeri olarak belirleyip, bir sonraki ifadenin konumu ile arasındaki farkı alıp arada kalan bölümü yeni bir kolon olarak yazıyoruz.

Mesela,

PATINDEX('%StartTime%', INITIAL_VALUE) + LEN('StartTime:')

ifadesinde StartTime geçen noktayı tespit edip bu noktadan yine kendisinin uzunluğu kadar ilerleyip almak istediğimiz tarih kısmına geliyoruz. Sonra da, bir sonraki sabit ifade olan EndTime’ın konumu ile arasındaki farklı buluyoruz.

(PATINDEX('%EndTime%', INITIAL_VALUE) - PATINDEX('%StartTime%', INITIAL_VALUE) - LEN('StartTime:'))

Örnek kodları da aşağıda bulabilirsiniz: