Ludzie pragną czasami się rozstawać, żeby móc tęsknić, czekać i cieszyć się z powrotem.
NAZWISKO;
Rys.5.9.
Poza funkcją YEAR mamy do dyspozycji funkcje MDNTH oraz DAY, które odpowiednio wydobywają z daty miesiąc i dzień. Oto przykład:
SELECT P. IMIĘ, P. NAZWISKO, P.DATA_ZATR
YEAR(P.DATA_ZATR) AS ROK,
MONTH(P.DATA_ZATR) AS MIESIAC,
DAY(P.DATA_ZATR) AS DZIEN
FROM DB2ADMIN.PRACOWNICY P;
Rys.5.10.
W naszej przykładowej bazie danych znajduje się tabela WYPOŻYCZENIA, która m.in. przechowuje dane o dacie wypożyczenia samochodu i o dacie jego oddania. Następny przykład będzie obliczał
ilość dni, przez które samochód był wypożyczony.
SELECT K.NAZWISKO, W.NR_WYPOZYCZENIA,
W.DATA_WYP, W.DATA_ODD,
DAYS(W.DATA_ODD)- DAYS(W.DATA_WYP) + l AS ILOSC_DNI
FROM DB2ADMIN.KLIENCI K, DB2ADMIN.WYPOŻYCZENIA W
WHERE K.NR_KLIENTA = W.NR_KLIEHTA AND W.DATA_ODD IS NOT NULL;
29
Arkadiusz Jakubowski – Podstawy SQL – ćwiczenia praktyczne
___________________________________________________________________________________________________
Rys.5.11.
Ciąg DAYS(W.DATA_ODD) - DAYS (W. DAT_WYP) + l AS ILOSC_DNI występujący w
zapytaniu odejmuje od daty oddania datę wypożyczenia samochodu i dodaje jeden. Dodanie jednego dnia ma na celu zaznaczenie sytuacji, gdy klient oddał samochód w dniu wypożyczenia. W takim przypadku różnica tych dat równa jest zero. W pozostałych przypadkach również dodawana musi być liczba jeden, aby zawrzeć w wyniku pierwszy dzień wypożyczenia. Funkcja DAYS odczytuje z daty ilość dni od daty l stycznia 0001 roku plus jeden.
Następny przykład użycia funkcji DAYS polega na odjęciu od istniejących dat dwóch dni. Możemy również posłużyć się funkcją YEARS oraz MONTHS, które odpowiednio oznaczają lata i miesiące.
SELECT K. NAZWISKO, W. NR_WYPOZYCZENIA,
W.DATA_WYP, W.DATA_ODD
W.DATA_WYP - 2 DAYS, W. DATA_ODD - 2 DAYS
FROM DB2ADMIN.KLIENCI K,
DB2ADMIN.WYPOŻYCZENIA W
WHERE K.NR_KLIENTA = W. NR_KLIENTA
AND W.DATA_ODD IS NOT NULL
AND K.MIASTO = 'WARSZAWA';
Rys.5.12.
Wybieranie podłańcucha
W razie potrzeby wybrania tyko pewnej części łańcucha musimy zastosować funkcję SUBSTR. Na poniższym rysunku funkcja SUBSTR wybiera ciąg o długości sześciu znaków począwszy od trzeciego znaku.
30
Arkadiusz Jakubowski – Podstawy SQL – ćwiczenia praktyczne
___________________________________________________________________________________________________
Rys.5.13.
SELECT SUBSTR(K.NAZWISKO, 3, 4), K.NAZWISKO
FROM DB2ADMIN.KLIENCI K;
Rys.5.14.
W InterBase funkcję SUBSTR należy „uaktywnić". Polega to na zadeklarowaniu funkcji, która zostanie pobrana z zewnętrznej biblioteki dołączanej dynamicznie DLL. Aby funkcja ,.'." SUBSTR była aktywna w InterBase, wykonaj poniższe polecenie w Interactive SQL.
DECLARE EXTERNAL FUNCTION SUBSTR
CSTRING(80), SMALLINT, SMALLINT
RETURNS CSTRING(SO) FREE_IT
ENTRY_POINT 'IB_UDF_Substr' MODULE_NAME 'ib_udf.dll';
Po wykonaniu powyższego polecenia, możemy przejść do opcji IBConsole, aby zobaczyć tę funkcję, klikając w panelu po lewej stronie w ikonę External Function.
Inaczej niż w DB2, w InterBase funkcja SUBSTR wybiera ciąg począwszy od pozycji podanej w drugim argumencie a skończywszy na trzecim argumencie. Zatem polecenie:
SELECT SUBSTR(K.NAZWISKO, 3, 4), K.NAZWISKO
FROM KLIENCI K;
zwróci następujące wyniki:
31
Arkadiusz Jakubowski – Podstawy SQL – ćwiczenia praktyczne
___________________________________________________________________________________________________
Rys.5.15.
Łączenie łańcuchów
Funkcja CONCAT pozwala łączyć ciągi znaków w jeden łańcuch wynikowy. Funkcja ta jest dostępna tylko w DB2. Poniższy przykład zapytania wyświetli listę klientów wraz z adresem zamieszkania.
Taka lista może posłużyć jako źródło do korespondencji seryjnej.
SELECT K.IMIE CONCAT ' ' CONCAT K.NAZWISKO AS KLIENT,
'ul. ' CONCAT K.DLICA CONCAT ' ' CONCAT K. NUMER AS ULICA,
K. KOD CONCAT ' ' CONCAT K. MIASTO AS MIASTO
FROM DB2ADMIN.KLIENCI K
ORDER BY K.NAZWISKO;
Zamiast funkcji CONCAT można użyć znaków | |:
SELECT K.IMIĘ | | ' ' | | K.NAZWISKO AS KLIENT, ...
Rys.5.16.
Wyrażenie CASE
Wyrażenie CASE pozwala na wybranie pewnej wartości w zależności od wartości w innej kolumnie.
32
Arkadiusz Jakubowski – Podstawy SQL – ćwiczenia praktyczne
___________________________________________________________________________________________________
Wyrażenie CASE dostępne jest tylko w systemie DB2. W przykładzie poniżej sprawdzamy, czy klient pochodzi z Warszawy; jeżeli tak, to w kolumnie wpisywana jest wartość „Klient oddziału macierzystego", w przeciwnym razie jest to „Klient z przedstawicielstwa".
SELECT K.IMIE, K.NAZWISKO, K.MIASTO,
CASE K.MIASTO
WHEN 'WARSZAWA' THEN 'Klient oddziału macierzystego'
ELSE 'Klient z przedstawicielstwa'
END
FROM DB2ADMIN.KLIENCI K ORDER BY K.NAZWISKO;
Rys.5.17.
Podsumowanie
1. Funkcje arytmetyczne mogą być używane w klauzuli SELECT orazw HERE.
2. Kolumny wyliczone mogą być nazwane przez zastosowanie klauzuli AS.
3. Funkcje skalarne mogą być używane do zmiany reprezentacji danych - funkcje: DECIMAL, SUBSTR, CONCAT.
4. Funkcje skalarne mogą być użyte do wydobycia lat, miesięcy oraz dni z różnych formatów daty.
5. Wyrażenie CASE pozwala na wybór wartości dla kolumny w zależności od zdefiniowanego warunku.
33
Arkadiusz Jakubowski – Podstawy SQL – ćwiczenia praktyczne
___________________________________________________________________________________________________
Rozdział 6.Funkcje kolumnowe i grupujące
W tym rozdziale poznamy funkcje operujące na kolumnach, które mogą być użyte w celu wydobycia wyników z jednego lub większej ilości wierszy Poznamy również zasady grupowania wierszy
Funkcje kolumnowe
Do funkcji kolumnowych zalicza się ftmkcje SUM, AVG, MIN, MAX oraz COUNT Funkcje te są używane w klauzulach SELECT lub HAVING
SUM - funkcja służąca do obliczenia sumy wartości w określonych kolumnach,
AVG - oblicza średnią wartości \v kolumnie,
MIN - znajduje minimalną wartość,
MAX - znajduje maksymalną wartość,