TOP

Lekcja SQL 7. Funkcje przetwarzania danych

Podobnie jak w większości języków programowania, SQL zawiera funkcje przetwarzania danych. Warto zauważyć, że w przeciwieństwie do instrukcji SQL, funkcje nie są ustandaryzowane dla wszystkich typów SZBD, czyli aby wykonywać te same operacje na danych, różne SZBD mają własne nazwy funkcji. Oznacza to, że kod zapytania napisany w jednym SZBD może nie działać w innym i należy to wziąć pod uwagę w przyszłości. Dotyczy to głównie funkcji przetwarzających wartości tekstowe, konwertujących typy danych i manipulujących datami.


Większość systemów DBMS obsługuje standardowy zestaw typów funkcji, a mianowicie:

  • Funkcje tekstowe służące do przetwarzania tekstu (wyodrębnianie części znaków z tekstu, określanie długości tekstu, zamiana znaków na wielkie lub małe litery...);
  • Funkcje numeryczne. Służą do wykonywania operacji matematycznych na wartościach liczbowych;
  • Funkcje daty i czasu (dokonuje się manipulacji datą i czasem, obliczany jest odstęp między datami, sprawdzana jest poprawność dat itp.);
  • Funkcje statystyczne (do obliczania wartości maksymalnych/minimalnych, wartości średnich, obliczania ilości i sumy...);
  • Funkcje systemowe (dostarczają różnego rodzaju informacji serwisowych o DBMS, użytkowniku itp.).
  • 1. Funkcje SQL do przetwarzania tekstu

    Implementacja SQL w MS Access posiada następujące funkcje przetwarzania tekstu:

    Funkcjonować Opis
    Left() Wybiera znaki w tekście od lewej strony
    Right() Zaznacza znaki w tekście po prawej stronie
    Mid() Wybiera znaki ze środka tekstu
    UCase() Konwertuje znaki na wielkie litery
    LCase() Konwertuje znaki na małe litery
    LTrim() Usuwa wszystkie puste znaki po lewej stronie tekstu
    RTrim() Usuwa wszystkie puste znaki po prawej stronie tekstu
    Trim() Usuwa wszystkie puste znaki z obu stron tekstu

    Przekonwertujmy nazwy produktów na wielkie litery za pomocą funkcji UCase():

    Run SQLSELECT Product, UCase(Product) AS Product_UCase 
    FROM Sumproduct
    

    Oddzielmy pierwsze trzy znaki w tekście za pomocą funkcji LEFT():

    Run SQLSELECT Product, LEFT(Product, 3) AS Product_LEFT 
    FROM Sumproduct
    

    2. Funkcje SQL do przetwarzania liczb

    Funkcje przetwarzania liczb służą do wykonywania operacji matematycznych na danych liczbowych. Funkcje te przeznaczone są do obliczeń algebraicznych i geometrycznych, dlatego są używane znacznie rzadziej niż funkcje przetwarzające datę i czas. Jednak funkcje numeryczne są najbardziej ujednolicone we wszystkich wersjach SQL. Spójrzmy na listę funkcji numerycznych:

    Funkcjonować Opis
    SQR() Zwraca pierwiastek kwadratowy z określonej liczby
    ABS() Zwraca wartość bezwzględną liczby
    EXP() Zwraca wykładnik określonej liczby
    SIN() Zwraca sinus określonego kąta
    COS() Zwraca cosinus określonego kąta
    TAN() Zwraca tangens określonego kąta

    Wymieniliśmy tylko kilka głównych funkcji, ale zawsze możesz odwołać się do dokumentacji DBMS, aby uzyskać pełną listę obsługiwanych funkcji ze szczegółowymi opisami.

    Na przykład napiszmy zapytanie, aby uzyskać pierwiastek kwadratowy z liczb w kolumnie Kwota za pomocą funkcji SQR():

    Run SQLSELECT Amount, SQR(Amount) AS Amount_SQR 
    FROM Sumproduct
    
    MySQL używa funkcji SQRT() do uzyskania pierwiastka kwadratowego z liczby.

    3. Funkcje SQL do przetwarzania daty i czasu

    Funkcje manipulacji datą i czasem należą do najważniejszych i najczęściej używanych funkcji SQL. W bazach danych wartości daty i godziny przechowywane są w specjalnym formacie, dzięki czemu nie można ich bezpośrednio wykorzystać bez dodatkowego przetwarzania. Każdy DBMS posiada własny zestaw funkcji do przetwarzania dat, co niestety nie pozwala na ich przenoszenie na inne platformy i implementacje SQL.

    Lista niektórych funkcji do obsługi daty i godziny w MS Access:

    Funkcjonować Opis
    DatePart() Zwraca część daty: rok, kwartał, miesiąc, tydzień, dzień, godzina, minuta, sekunda
    Year(), Month() Zwraca odpowiednio rok i miesiąc
    Hour(), Minute(), Second() Zwraca godzinę, minuty i sekundy określonej daty
    WeekdayName() Zwraca nazwę dnia tygodnia

    Spójrzmy na przykład działania funkcji DatePart():

    SELECT Date1, DatePart("m", Date1) AS Month1 
    FROM Sumproduct
    

    Funkcja DatePart() posiada dodatkowy parametr, dzięki któremu możemy wyświetlić wymaganą część daty. W przykładzie wykorzystaliśmy wartość parametru „m”, który wyświetla numer miesiąca (w ten sam sposób możemy wyświetlić rok – „yyyy”, kwartał – „q”, dzień – „d”, tydzień - „w”, godzina – „h”, minuty – „n”, sekundy – „s” itp.).

    4. Funkcje statystyczne SQL

    Funkcje statystyczne pomagają nam uzyskać gotowe dane bez ich próbkowania. Zapytania SQL z tymi funkcjami są często używane do analizowania i generowania różnych raportów. Przykładem takich selekcji może być: określenie liczby wierszy w tabeli, uzyskanie sumy wartości dla danego pola, wyszukanie największej/najmniejszej lub średniej wartości w określonej kolumnie tabeli. Zauważamy również, że funkcje statystyczne są obsługiwane przez wszystkie SZBD bez żadnych specjalnych zmian pisemnych.

    Lista funkcji statystycznych w DBMS Access:

    Funkcjonować Opis
    COUNT() Zwraca liczbę wierszy w tabeli lub kolumnie
    SUM() Zwraca sumę wartości w kolumnie
    MIN() Zwraca najmniejszą wartość w kolumnie
    MAX() Zwraca największą wartość w kolumnie
    AVG() Zwraca średnią wartość w kolumnie

    4.1 Przykłady wykorzystania funkcji COUNT().

    Zwraca liczbę wszystkich wierszy w tabeli:

    Run SQLSELECT COUNT(*) AS Count1 
    FROM Sumproduct
    

    Zwraca liczbę wszystkich niepustych wierszy w polu Produkt:

    SELECT COUNT(Product) AS Count2 
    FROM Sumproduct
    

    Celowo usunęliśmy jedną wartość z kolumny Produkt, aby pokazać różnicę w wydajności między dwoma zapytaniami.

    4.2 Przykłady wykorzystania funkcji SUM().

    Run SQLSELECT SUM(Quantity) AS Sum1 
    FROM Sumproduct 
    WHERE Month = 'April'
    

    W tym zapytaniu wyświetliliśmy łączną ilość towarów sprzedanych w miesiącu kwietniu.

    Run SQLSELECT SUM(Quantity*Amount) AS Sum2 
    FROM Sumproduct
    

    Jak widać w funkcjach statystycznych obliczenia możemy wykonywać także na kilku kolumnach przy użyciu standardowych operatorów matematycznych.

    4.3 Przykład użycia funkcji MIN().

    Run SQLSELECT MIN(Amount) AS Min1 
    FROM Sumproduct
    

    4.4 Przykład użycia funkcji MAX().

    Run SQLSELECT MAX(Amount) AS Max1 
    FROM Sumproduct
    

    4.5 Przykład użycia funkcji AVG()

    Run SQLSELECT AVG(Amount) AS Avg1
    FROM Sumproduct