Posts Tagged ‘T-SQL ile Metinleri Parçalarına Ayrıştırmak’
T-SQL ile Metinleri Parçalarına Ayrıştırmak
27 Mayıs 2011
Yorum bırakın
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
Go
/*************************************************************************************************/
/* Bu fonksiyon, verilen bir metni kelimelerine ayrıştırır ve sonucu bir tablo olarak kullancıya sunar. */
/*************************************************************************************************/
ALTER FUNCTION [dbo].[FN_TBL_KelimeListesi] (
@Parametre VARCHAR(MAX)
, @Ayraclar VARCHAR(100)
)
RETURNS @Sonuc TABLE (
[Sıra] INT IDENTITY(1,1)
, [Boy] INT DEFAULT((0))
, [Ayrac] VARCHAR(1) DEFAULT(”)
, [Kelime] VARCHAR(MAX) DEFAULT(”)
)
AS BEGIN
DECLARE @Basamak INT
, @Boy INT
, @Ayrac VARCHAR(1)
, @Kelime VARCHAR(MAX)
, @Paragraf VARCHAR(MAX)
SELECT @Basamak = 1
, @Ayraclar =ISNULL(@Ayraclar,‘%[ ,.:; ‘
+CHAR(10)+CHAR(13)
+‘!?”()<&>={}\/*+`_-]%’)
, @Paragraf = ISNULL(@Parametre,”)
WHILE @Basamak <> 0 BEGIN
/* En soldan başlayıp ilk ayracımızın hangi basamakta olduğunu buluyoruz */
/* Ardından bu haltı hangi ayraç yemiş onu buluyoruz */
SELECT @Basamak = PATINDEX(@Ayraclar, @Paragraf)
, @Ayrac = SUBSTRING(@Paragraf, @Basamak, 1)
/* Kelimeyi Soldan ayraca kadar alyoruz */
IF(@Basamak <> 0) SELECT @Kelime =RTRIM(LTRIM(LEFT(@Paragraf, @Basamak – 1)))
ELSE SELECT @Kelime =RTRIM(LTRIM(@Paragraf))
/* Kelimenin boyunu posunu lyoruz */
SET @Boy =LEN(@Kelime)
IF(@Boy > 0) BEGIN
/* Kelimemizi ve boyunu posunu tablomuza yazyoruz */
INSERT INTO
@Sonuc ( Kelime
, Boy
, Ayrac
)
VALUES ( @Kelime
, @Boy
, @Ayrac
)
END
/* Aldımız kelimeyi paragraftan siliyoruz */
SELECT @Paragraf =RIGHT(@Paragraf,LEN(@Paragraf)– @Basamak)
/* Paragrafta kelime kalmadıysa döngüden kaçıyoruz */
IF LEN(@Paragraf)= 0 BREAK
END
RETURN
END
Bu kodu kullanabilmek için ise şöyle bir SQL cümlesi kullanmamız yeterli;
SELECT * FROM dbo.FN_TBL_KelimeListesi(‘Test,amaçli!deneysel&veriler.’,NULL)