Rakamları Harflerden Ayır - Microsoft SQL Server


SQL Server ile T-SQL komutlarını kullanarak yazılmış rakamları harflerden ayıran bir fonksiyon örneğidir.

Sorgu


CREATE FUNCTION RakamlariHarflerdenAyir(@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

Sorgu (Açıklamalı)


/*--------------------------------------------------
Fonksiyonumuzun adını RakamlariHarflerdenAyir olarak belirledik.
@metin adında da NVARCHAR tipinde bir parametre belirliyoruz.
Rakamları metinlerden ayıklayacak metnimizi buraya gireceğiz.
--------------------------------------------------*/
CREATE FUNCTION RakamlariHarflerdenAyir(@metin VARCHAR(MAX))

	/*--------------------------------------------------
	Fonksiyon NVARCHAR tipinde değer döndürecek.
	--------------------------------------------------*/
	RETURNS NVARCHAR(MAX)
	AS
	BEGIN
		
		/*--------------------------------------------------
		Döngü 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.
		--------------------------------------------------*/
		DECLARE @sayac INT
		DECLARE @ayiklanan_metin NVARCHAR(100)

		/*--------------------------------------------------
		Değişkenlerimize ait başlangıç değerlerini tanımladık.
		--------------------------------------------------*/
		SET @sayac=1
		SET @ayiklanan_metin = ''
	 
		/*--------------------------------------------------
		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.
		--------------------------------------------------*/
		WHILE LEN(@metin)>=@sayac
		BEGIN

			/*--------------------------------------------------
			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.
			--------------------------------------------------*/			
			IF ISNUMERIC(SUBSTRING(@metin,@sayac,1))=1
			BEGIN
				SET

				/*--------------------------------------------------
				@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.
				--------------------------------------------------*/				
				@ayiklanan_metin = @ayiklanan_metin + SUBSTRING(@metin,@sayac,1)
			END


			/*--------------------------------------------------
			Fonksiyon sayısal değer bulmuş olsa da olmasa da 
			sayacımızı arttırıyoruz.
			--------------------------------------------------*/				
			SET @sayac=@sayac+1
		END

	
	/*--------------------------------------------------
	Fonksiyon çalışmasını bitirdiği zaman @ayiklanan_metin
	değerini sonuç olarak döndürmesini sağlıyoruz.
	--------------------------------------------------*/				
	RETURN
	@ayiklanan_metin
END

Etiketler
microsoft sql server açıklamalı içerik