Tema: Re: VBA to T-SQL
Autorius: Raimis
Data: 2013-07-31 10:30:35
Pirmas blynas ...

Funkcijos naudojimas:
SELECT dbo.linksniuotas('duodu vienas kirtis-gaunu du', 3)

SQL:

IF EXISTS (SELECT *
    FROM   sysobjects
    WHERE  name = N'linksnis')
 DROP FUNCTION linksnis
GO

CREATE FUNCTION linksnis(@Zodis nvarchar(1000), @linksnis int)
RETURNS nvarchar(1000)
AS
BEGIN
 DECLARE @galune nvarchar(3), @galune_n nvarchar(10)
 IF Len(Rtrim(@Zodis))>=3
 BEGIN
 SELECT @galune = Right(Rtrim(@Zodis),3)

 SELECT @galune_n=
  CASE @galune
   WHEN 'nas' THEN
   CASE @linksnis
    WHEN 1 THEN 'no'
    WHEN 2 THEN 'nui'
    WHEN 3 THEN 'ną'
    WHEN 4 THEN 'nu'
    WHEN 5 THEN 'ne'
    ELSE ''
   END
   WHEN 'tis' THEN
   CASE @linksnis
    WHEN 1 THEN 'čio'
    WHEN 2 THEN 'čiui'
    WHEN 3 THEN 'tį'
    WHEN 4 THEN 'čiu'
    WHEN 5 THEN 'tyje'
    ELSE ''
   END
  ELSE @galune
  END
 SELECT @Zodis = Substring(@Zodis, 1,Len(@Zodis) - 3) + @galune_n
 END

RETURN @Zodis
END
GO

IF EXISTS (SELECT *
    FROM   sysobjects
    WHERE  name = N'linksniuotas')
 DROP FUNCTION linksniuotas
GO

CREATE FUNCTION linksniuotas(@sakinys nvarchar(2000), @linksnis int)
RETURNS nvarchar(2000)
AS
BEGIN




DECLARE @sakinys_n nvarchar(2000), @Zodis nvarchar(1000)
SELECT @sakinys_n=''



SELECT @sakinys = Rtrim(@sakinys) + ' '

WHILE CHARINDEX(' ', @sakinys) > 0
Begin
SET @Zodis = LEFT(@sakinys, CHARINDEX(' ', @sakinys))


IF CHARINDEX('-',@Zodis)>0
BEGIN
  DECLARE @zod nvarchar(1000), @nsak nvarchar(1000)
  SELECT @zod=  replace(@Zodis,'-',' '), @nsak=''


  WHILE CHARINDEX(' ', @zod) > 0
  BEGIN
    SET @Zodis = LEFT(@zod, CHARINDEX(' ', @zod))
    SELECT @nsak =  @nsak + dbo.linksnis(@Zodis, @linksnis) + '-'
    SET @zod = SUBSTRING(@zod,CHARINDEX(' ', @zod)+1,len(@zod))
  END
  SELECT @sakinys_n =  @sakinys_n + ' ' + LEFT(@nsak,LEN(@nsak)-1)
END
ELSE
  BEGIN
    SELECT @sakinys_n =  @sakinys_n + ' ' + dbo.linksnis(@Zodis, @linksnis)
  END

SET @sakinys = SUBSTRING(@sakinys,CHARINDEX(' ', @sakinys)+1,len(@sakinys))
End

RETURN @sakinys_n
END






"CurrentUser" <ne_toks@yahoo.com> wrote in message 
news:kt68m1$lhc$1@trimpas.omnitel.net...
> Dedu. Prašymas labai nesityzdavot. Esu tik 'amateur', neturiu jokio IT 
> išsilavinimo, bet kai ką pasidarau dėl automatizacijos. Taigi
>
> Function Linksniavimas(Name, Lin As Integer)
> On Error Resume Next
> Dim ar_su_bruksniu As Integer
>
> ar_su_bruksniu = InStr(1, Name, "-", vbTextCompare) 'nustatoma, ar yra 
> stringe brūkšnys
>    If ar_su_bruksniu > 0 Then 'jei yra brūkšnys
>        Linksniavimas = Bruksnys(Name, Lin) 'su brūkšniu
>    Else                        ' jei nėra brūkšnio
>        Linksniavimas = separate(Name, Lin) 'be brūkšnio
>    End If
>
> End Function
> Function Bruksnys(Name, Lin)
> On Error Resume Next
> Dim pos As Integer
> Dim iki_bruksnio, po_bruksnio
>
>    pos = InStr(Name, "-") 'nustatoma, kur yra brūkšnys
>    iki_bruksnio = Mid(Name, 1, pos - 1) 'paimamas Str iki brūkšnio
>    po_bruksnio = Mid(Name, pos + 1) 'paimamas Str nuo brūkšnio
>
>    Bruksnys = separate(iki_bruksnio, Lin) & "-" & separate(po_bruksnio, 
> Lin) 'viskas linksniuojama ir sujungiama
>
> End Function
>
> Function separate(Name, Lin)
> On Error Resume Next
> Dim num, poz As Integer
>
> If IsNull(Name) Then
>    separate = ""
>    Exit Function
> Else
>    Name = Replace(Name, "-", " ")
>    seka = Split(Name, , , vbTextCompare) 'Išskirstomi stringo žodžiai į 
> Seką
>    For num = 0 To UBound(seka)
>        zodzio_gal = IIf(linksnis(seka(num), Lin) = "", Right(seka(num), 
> 3), linksnis(seka(num), Lin))
>        'suformuojama seka iš naujai gautų žodžių
>        seka(num) = Replace(seka(num), Right(seka(num), 3), zodzio_gal)
>    Next num
> End If
> separate = Trim(Join(seka)) 'sujungiama seka i nauja string'-a
>
> End Function
> 'Identifikuojama galūnė
> Function linksnis(Name, Lin)
> galune = Right(Name, 3)
> Select Case galune
>    Case "nas"
>        linksniai = Array("no", "nui", "ną", "nu", "ne")
>    Case "tis"
>        linksniai = Array("čio", "čiui", "tį", "čiu", "tyje")
>    Case Else
>        linksniai = Array("", "", "", "", "")
>    End Select
>
> linksnis = linksniai(Lin)
>
> End Function
>
> "zZz"  wrote in message news:kt3uii$vrv$1@trimpas.omnitel.net...
>
> Įmesk kodą ;)
>
> "CurrentUser" <ne_toks@yahoo.com> wrote in message 
> news:ks1ht5$tou$1@trimpas.omnitel.net...
>> Sveiki,
>>
>> Kas galetu konvertuoti VBA koda (tokia nedidele 'user function' (50
>> eiluciu)) i SQL Serveriui (2008 R2) suprantama kalba (gal T-SQL, ar koki
>> biesa - cia as ABS. zalias)?
>> atlygis alumi vln
>>
>> Pagarba.
>>
>