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 ;)
Mateusz Mazurek