SQL Server (T-SQL) - Funkcja (UDF) zliczająca wystąpienia danego znaku w stringu
Korzystając z SQL Servera mamy do dyspozycji sporo funkcji operujących na tekście (łańcuchach znaków, stringach). Jeśli nasze potrzeby wybiegają poza to co mamy dostępne bezpośrednio, należy sobie radzić korzystając z tych metod, które mamy pod ręką, składając z nich nową funkcję. W ten właśnie sposób spróbujemy napisać funkcje do zliczania konkretnych znaków w tekście, a następnie zliczania słów.
Z czego będziemy korzystać?
Przyszło mi ostatnio stanąć przed problemem zliczenia wystąpień konkretnych znaków w tekście, pełniących funkcję separatorów. Zatem liczba tych znaków określała liczbę elementów. W każdym razie... T-SQL nie daje nam domyślnie takiej funkcji, którą moglibyśmy określić liczbę konkretnych znaków w danym tekście. Z tego powodu spróbujemy napisać własną metodę, wykorzystującą standardową funkcję LEN() zwracającą długość danego ciągu znaków oraz REPLACE(), dzięki której możemy dokonać podmiany pewnych wzorców tekstu na inne.Dlaczego właśnie te funkcje? Otóż zagadnienie spróbujemy sprowadzić do sytuacji w której porównamy ze sobą dwie długości ciągów: pierwotnego, oraz takiego w którym usuniemy wszystkie interesujące nas znaki. Różnica tych dwóch wartości powinna nam determinować interesującą nas liczbę wystąpień wskazanego znaku.
Jak to będzie wyglądało w kodzie?
Spróbujmy to teraz przełożyć na język T-SQL, chociaż póki co nie tworząc z tego funkcji (UDF - User Definied Function). Spójrzmy na poniższy fragment kodu:SET @tekst = 'Dowolny tekst pełniący rolę przykładu'
SELECT LEN(@tekst) - LEN(REPLACE(@tekst, 'o', ''))
To może zróbmy z tego UDF?
W niektórych sytuacjach, wygodnie będzie zapisać sobie tę operację jako funkcję, z której będziemy mogli korzystać w dowolnym momencie. Ja postaram się podać taką funkcję a następnie opatrzyć ją minimalistycznym opisem, dlatego jeśli ktoś chce dowiedzieć się więcej o funkcjach w T-SQL i składni ich tworzenia, to zapraszam na stronę: User Definied FunctionSpójrzmy więc na poniższy kod:
(
@text NVARCHAR(max)
@character NCHAR(1)
)
RETURNS INT
AS
BEGIN
RETURN SELECT LEN(@text) - LEN(REPLACE(@text, @character, ''))
END
Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!