29-05-2014, 04:34
Merhaba, bu yazıda sizlere T-SQL ile bir metindeki rakamları harflerden ayırıp yazan fonksiyonun T-SQL ile nasıl yapıldığını göstermeye çalışacağım, umarım faydasını görürsünüz…
Fonksiyon ve Açıklamaları
Fonksiyonun Açıklamasız Görünümü
Not: Fonksiyonu oluşturduktan sonra Object Explorer’dan veritabanlarını yenileyin, gerekirse SQL Server’ı yeniden başlatın, çünkü fonksiyonu görmeme gibi bir sıkıntı olabiliyor.
Fonksiyonun Kullanımı
Sonuç:12345678
Kaynak: http://www.tportal.org/t-sql-rakamlari-h...on-yapimi/
Fonksiyon ve Açıklamaları
SQL
- CREATE FUNCTION rakamlariHarflerdenAyir(@metin VARCHAR(MAX))
- /*
- Fonksiyonumuzun adını “rakamlariHarflerdenAyir” olarak belirledik.
- @metin adında da NVARCHAR tipinde bir parametre belirliyoruz.
- Rakamları metinlerden ayıklayacak metnimizi buraya gireceğiz.
- "www.tportal.org"
- */
- RETURNS NVARCHAR(MAX)
- /*
- Fonksiyon NVARCHAR tipinde değer döndürecek.
- */
- AS
- BEGIN
- DECLARE @sayac INT
- DECLARE @ayiklanan_metin NVARCHAR(100)
- /*
- Döngümüz için @sayac adında bir değişken tanımladık.
- Ayıkladığımız rakamları toplamak için de ayiklanan_metin adında bir değişken tanımladık.
- */
-
- SET @sayac=1
- SET @ayiklanan_metin = ''
- /*
- Değişkenlerimize ait başlangıç değerlerini tanımladık.
-
- */
-
- WHILE LEN(@metin)>=@sayac
- /*
- WHILE döngüsü ile metindeki her bir rakamı/harfi tek tek kontrol edeceğiz.
- Her bir rakam/harf kontrol edildiğinde sayaç çalışıyor.
- Tüm rakam/harflerin kontrolü yapıldıktan sonra sayacın çalışması anlamsız olacaktır.
- Bu yüzden @sayac değişkeni @metin değişkeninin uzunluğundan büyük ise döngüyü durduruyoruz.
- */
-
- BEGIN
- IF ISNUMERIC(SUBSTRING(@metin,@sayac,1))=1
- /*
- SUBSTRING fonksiyonu ile @metin değişkenindeki her bir harfi/rakamı sırayla alıyoruz.
- ISNUMERIC fonksiyonu ile alınan harfin ya da rakamın sayısal bir değer olup olmadığını kontrol ediyoruz.
- Eğer sonuç 1'e eşitse sayısal bir değerdir ve şartı sağladığından IF operatörüne ait BEGIN – END arası komutlar çalışabilir.
- */
-
- BEGIN
- SET @ayiklanan_metin = @ayiklanan_metin + SUBSTRING(@metin,@sayac,1)
- /*
- @ayiklanan_metin değişkenimizi başta boş ('') olarak tanımlamıştık.
- Fonksiyon çalışırken bulduğu her sayısal ifadeyi @ayıklanan_metin değişkenindeki
- değerin yanına ekleyecektir.
- */
-
- END
- SET @sayac=@sayac+1
- /*
- Fonksiyon sayısal değer bulmuş olsa da olmasa da sayacımızı arttırıyoruz.
- */
-
- END
- RETURN
- @ayiklanan_metin
- /*
- Fonksiyon çalışmasını bitirdiği zaman @ayiklanan_metin
- değerini sonuç olarak döndürmesini sağlıyoruz.
- "www.tportal.org"
- */
-
- END
Fonksiyonun Açıklamasız Görünümü
SQL
- CREATE FUNCTION rakamAyir(@metin VARCHAR(MAX))
- RETURNS NVARCHAR(MAX)
- AS
- BEGIN
- DECLARE @sayac INT
- DECLARE @ayiklanan_metin NVARCHAR(100)
-
- SET @sayac=1
- SET @ayiklanan_metin = ''
-
- WHILE LEN(@metin)>=@sayac
- BEGIN
- IF ISNUMERIC(SUBSTRING(@metin,@sayac,1))=1
- BEGIN
- SET
- @ayiklanan_metin = @ayiklanan_metin + SUBSTRING(@metin,@sayac,1)
- END
- SET @sayac=@sayac+1
- END
- RETURN
- @ayiklanan_metin
- END
Not: Fonksiyonu oluşturduktan sonra Object Explorer’dan veritabanlarını yenileyin, gerekirse SQL Server’ı yeniden başlatın, çünkü fonksiyonu görmeme gibi bir sıkıntı olabiliyor.
Fonksiyonun Kullanımı
SQL
- SELECT dbo.rakamlariHarflerdenAyir('a1b2c3d4e5f6g7h8')
Sonuç:12345678
Kaynak: http://www.tportal.org/t-sql-rakamlari-h...on-yapimi/