Mateusz Mazurek – programista z pasją

Python, architektura, ciekawostki ze świata IT

Programowanie

Funkcje w MS SQL 2012

Cześć! Cieszę się, że mnie odwiedziłeś/aś. Zanim przejdziesz do artykułu chciałbym zwrocić Ci uwagę na to, że ten artykuł był pisany kilka lat temu (2013-06-10) miej więc proszę na uwadzę że rozwiązania i przemyślenia które tu znajdziesz nie muszą być aktualne. Niemniej jednak zachęcam do przeczytania.

3 proste przykłady funkcji w MS SQL 2012.

1 przykład to własna implementacja funkcji Replicate (lekka zmiana założenia nieco jednak różni ją od Replicate).

Funkcja generuje n „*”, gdzie n jest przekazywane w parametrze. Kod:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE FUNCTION repl
(
    @param1 INT

)
RETURNS nvarchar(255)
AS
BEGIN

    DECLARE @i INT=0;

    DECLARE @w AS nvarchar(255)=''
   
    WHILE( @i<@param1 )
    BEGIN
        SET @w= CONCAT(@w,'*')
        SET @i=@i+1
    END

    RETURN @w
END

Druga funkcja zwraca wszystkie możliwie wystąpienia litery w podanym stringu w formie jednokolumnowej tabeli.
Kod:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ALTER FUNCTION indexess
(
    @param1 nvarchar(255),
    @param2 nvarchar
)
RETURNS @q TABLE (Occ INT)
AS
BEGIN


    DECLARE @i INT=1
    WHILE( @i<= len(@param1) )
    BEGIN
       
         IF SUBSTRING(@param1,@i,1) = @param2
         BEGIN
            INSERT INTO @q VALUES(@i)
         END
         SET @i=@i+1

    END
    RETURN
END

Ostatni przykład to dość abstrakcyjna funkcja która odwraca dwa stringi (reverse) i łączy je przeplatając ich znaki.

Wejście: abcdefghij i 0123456789
Wyjście: j9i8h7g6f5e4d3c2b1a0

Kod:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
ALTER FUNCTION absss
(
    @a nvarchar(10),
    @b nvarchar(10)
)
RETURNS nvarchar(20)
AS
BEGIN

DECLARE @wynik nvarchar(20)=''
DECLARE @aa nvarchar(10) = reverse(@a)
DECLARE @bb nvarchar(10) = reverse(@b)
DECLARE @i INT=0


        WHILE( @i <= len(@aa) )
        BEGIN

             SET @wynik = concat(@wynik,SUBSTRING(@aa,@i,1) , SUBSTRING(@bb,@i,1))
             SET @i=@i+1

        END

    RETURN @wynik

END

Enjoy ;)

Dzięki za wizytę,
Mateusz Mazurek

A może wolisz nowości na mail?

Subskrybuj
Powiadom o
guest

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

0 komentarzy
Inline Feedbacks
View all comments