Arşiv

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(MAXDEFAULT()
)
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 <> 0SELECT @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)