1 Budowa wyrażeń w SQL: Wyrażenia języka SQL występują w instrukcji SELECT, oraz służą do formułowania warunków podawanych w klauzuli WHERE instrukcji.

Slides:



Advertisements
Podobne prezentacje
Funkcje matematyczne Microsoft Office 2003 Exel.
Advertisements

Tablice 1. Deklaracja tablicy
Język C/C++ Funkcje.
Mgr inż.Marcin Borkowski Podstawy Java Część II
Języki programowania C++
Bazy danych II Instrukcja SELECT Piotr Górczyński 25/08/2001.
MS Access 2003 Kwerendy Paweł Górczyński.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 4: Wyrażenia i operatory. Podstawowe instrukcje języka.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 2: Język bazy danych - SQL Proste zapytania.
WYZWALACZE (TRIGGERY) Wyzwalacz jest specjalnym rodzajem procedury składowanej, która może być wykonana w odpowiedzi na jedną z trzech sytuacji: UPDATE.
Funkcje znakowe, liczbowe i obsługa dat Kolejny krok w poznaniu SQL-a.
Funkcje znakowe, liczbowe i obsługa dat Kolejny krok w poznaniu SQL-a.
Funkcje agregujące Funkcja Opis Minimum Maksimum Średnia arytmetyczna
Funkcje znakowe ASCII(znak IN VARCHAR2) RETURN INTEGER
ASCII(znak IN VARCHAR2) RETURN INTEGER zwraca wartość numeryczną kod ascii znaku CHAR(n Integer)zwraca znak odpowiadający kodowi n CONCAT(tekst1, tekst2)zwraca.
Typy standardowe Typ Boolean Typ Integer Typ Float Typ Character Operacje wejścia-wyjścia.
Budowa wyrażeń w SQL: Wyrażenia języka SQL występują w instrukcji SELECT, oraz służą do formułowania warunków podawanych w klauzuli WHERE instrukcji takich,
BD-LAB6 Wojciech Pieprzyca
Wyrażenia Wyrażenie w Fortranie jest poprawną syntaktycznie kombinacją zmiennych, stałych, operatorów i funkcji. Wyrażenia są jednozdaniowymi przepisami.
Instrukcja skoku GO TO etykieta Np. GO TO 100 ….. 100WRITE (*,*) Przeskok do instrukcji 100 Uwaga! NIE WOLNO skakać do wnętrzna złożonych instrukcji warunkowych.
Zapis informacji Dr Anna Kwiatkowska.
Arkusz kalkulacyjny Excel
Structured Query Language
AWK Zastosowania Informatyki Wykład 1 Copyright, 2003 © Adam Czajka.
OPERACJA DZIELENIA W SQL
Podstawy programowania
opracowanie: Agata Idczak
SQL – podstawowe funkcje
Informatyka I Wykład 5 OPERATORY Priorytety i kolejność obliczeń
Zbiór do posortowania mieści się w pamięci
© A. Jędryczkowski – 2006 r. © A. Jędryczkowski – 2006 r.
Wyrażenia algebraiczne
Microsoft Office Excel
Wyrażenia w Turbo Pascalu.
Podstawy programowania
ANNA BANIEWSKA SYLWIA FILUŚ
MySQL bazy danych dla witryny
Instrukcja warunkowa i wyboru
Elżbieta Fiedziukiewicz
Programowanie baz danych
Komendy SQL do pracy z tabelami i bazami
Matematyka i system dwójkowy
Podstawy języka Instrukcje - wprowadzenie
Język manipulacji danymi – SQL cz. I
MOiPP Matlab Przykłady metod obliczeniowych Obliczenia symboliczne
PWSW Mechatronika Wykład 7 Matlab cd.
Instrukcje wyboru.
Krakowski Piotr, Woliński Radosław, Kowalski Piotr, Machowski Michał.
Komendy SQL do pracy z danymi
Zasady arytmetyki dwójkowej
Typy liczbowe, zmienne, operatory Zajęcia 4. Zmienne Zmienna – to w programowaniu element programu, który może mieć przypisaną pewną wartość (wartość.
METODY REPREZENTOWANIA IFORMACJI
TEMAT: ACCESS - KWERENDY.
Pętle – instrukcje powtórzeń
SciLab.
BAZY DANYCH Microsoft Access Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej Katedra Automatyki i.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
1 Opisy funkcji Adres strony WWW : html (należy odszukać hyperlink Function Index) (
Do czego służy arkusz kalkulacyjny, jego budowa
P ASCAL Definicje, deklaracje, podstawowe instrukcje 1.
 Formuła to wyrażenie algebraiczne (wzór) określające jakie operacje ma wykonać program na danych. Może ona zawierać liczby, łańcuchy znaków, funkcje,
1 Instrukcja SELECT : SELECT[DISTINCT  ALL] {*  [wyrażenie_kolumnowe [AS nowa_nazwa]],[…]} FROMNazwaTabeli [alias],[...] [WHEREwarunek_selekcji_wierszy]
Wybieranie wierszy: 1 Warunek WHERE Rodzaje warunków: - liczbowe - liczbowe z zakresu - znakowe.
Liczbami naturalnymi nazywamy liczby 0,1,2,3,..., 127,... Liczby naturalne poznaliśmy już wcześniej; służą one do liczenia przedmiotów. Zbiór liczb.
Widoki (views) - Perspektywy:
Ćwiczenie 1 Podaj liczbę wizyt w nieruchomościach w kolejnych dniach poprzedniego miesiąca kalendarzowego: SELECT data_wizyty, COUNT(*) AS liczba FROM.
Dane, zmienne, instrukcje
Własności relacji: Baza danych jest zbiorem relacji, o następujących własnościach: każda relacja w bazie danych jest jednoznacznie określona przez swoją.
Haskell Składnia funkcji.
POJĘCIE ALGORYTMU Wstęp do informatyki Pojęcie algorytmu
Zapis prezentacji:

1 Budowa wyrażeń w SQL: Wyrażenia języka SQL występują w instrukcji SELECT, oraz służą do formułowania warunków podawanych w klauzuli WHERE instrukcji takich, jak DELETE czy UPDATE. Kolejność (priorytet) operacji nie jest jawnie podana w dokumentacji MySQL, lecz wydaje się być zgodna z ogólnie przyjętymi konwencjami. W razie wątpliwości stosujemy grupowanie za pomocą nawiasów okrągłych.

2 Wyrażenia logiczne : Każda wartość różna od zera i NULL odpowiada w wyrażeniu logicznym prawdzie; a więc NULL i zero reprezentują wartość „fałsz”. Złożone wyrażenia logiczne, zbudowane za pomocą operatorów logicznych, zwracają jedynkę jako reprezentację wartości prawdziwej, a zero jako reprezentację fałszu. Operatory logiczne NOT : logiczna negacja, MySQL dopuszcza jako alternatywną notację wykrzyknik ( ! ) OR : logiczna alternatywa, MySQL dopuszcza alternatywną notację ( || ) AND : logiczna koniunkcja, alternatywna notacja MySQL ( &&) XOR : logiczna suma modulo 2 (alternatywa wykluczająca)

3 Wyrażenia arytmetyczne : Proste operatory arytmetyczne to dodawanie ( + ), odejmowanie ( - ), mnożenie ( * ) i dzielenie ( / ). Wynikiem dzielenia przez zero jest NULL ). Ponadto w MySQL dostępny jest bogaty zestaw funkcji matematycznych (wykładnicze, logarytmiczne, trygonometryczne itp.), gdzie w wypadku błędu (nielegalnego argumentu) zwracana jest wartość NULL.

4 Wyrażenia warunkowe : IFNULL(A,B) jeśli wartością A jest NULL zwraca B, w przeciwnym wypadku zwraca A. IF(A,B,C) : jeśli wartością logiczną A jest prawda (tzn. nie zero i nie NULL ) zwraca B, w przeciwnym wypadku zwraca C. Wartość A traktowana jest jako całkowitoliczbowa -- aby więc stosować taką konstrukcję dla warunku zależnego od wartości zmiennoprzecinkowej, należy w miejscu A użyć operacji porównania.

5 CASE wartość WHEN [wartość_porównywana] THEN wynik [WHEN [wartość_porównywana] THEN wynik...] [ELSE wynik ] END zwraca wynik gdy wartość = wartość_porównywana, w przeciwnym przypadku zwraca wynik po ELSE lub NULL gdy nie zapisano części ELSE. SELECT CASE count(*) WHEN 1 THEN 'a' WHEN 2 THEN 'b' WHEN 3 THEN 'c' ELSE 'Zły wariant‘ END FROM biuro2;

6 CASE WHEN [warunek] THEN wynik [WHEN [warunek] THEN wynik...] [ELSE wynik ] END zwraca wynik gdy pierwszy warunek jest prawdziwy, potem kolejny. W przeciwnym przypadku zwraca wynik po ELSE lub NULL gdy nie zapisano części ELSE. SELECT CASE WHEN count(*)>3 THEN 'a' WHEN count(*)>5 THEN 'b' ELSE 'Zły wariant' END FROM biuro2;

7 Porównania : W budowie wyrażeń logicznych przydają się oczywiście porównania. Operatory porównania można stosować również do wyrażeń napisowych. Wynik porównania wyrażeń napisowych zależeć będzie od tego, czy w ich budowie występują wartości zadeklarowane jako BINARY (co znosi utożsamienie małych i wielkich liter). Jeżeli wartością któregokolwiek z argumentów porównania jest NULL, porównanie zwraca jako wynik NULL (oczywiście za wyjątkiem funkcji IS NULL.)

8 równość oznacza się pojedynczym znakiem równości: = nierówność można oznaczyć: <> bądź : != 'mniejszy lub równy': = 'większy niż' i 'mniejszy niż‘ odpowiednio > oraz < ISNULL(A) zwraca jedynkę, jeżeli wartością A jest NULL, w przeciwnym wypadku zwraca zero A [NOT] BETWEEN B AND C wyrażenie równoważne A>=B AND A<=C o ile porównywane wyrażenia są tego samego typu, w przeciwnym wypadku sposób porównania wyznacza typ pierwszego argumentu ( A ).

9 GREATEST(v1, v2,...) : zwraca największy argument mysql> SELECT GREATEST(2,0); -> 2 mysql> SELECT GREATEST(34.0,3.0,5.0,767.0); -> mysql> SELECT GREATEST('B','A','C'); -> 'C' LEAST(v1, v2,...) : zwraca najmniejszy argument mysql> SELECT LEAST(2,0); -> 0 mysql> SELECT LEAST(34.0,3.0,5.0,767.0); -> 3.0 mysql> SELECT LEAST('B','A','C'); -> 'A'

10 Porównania napisów : wyrażenie IN (wartość1,...) : zwraca 1 jeżeli wyrażenie jest równe którejkolwiek wartości z listy podanej w nawiasach, w przeciwnym wypadku zwraca 0. Wartość wyrażenia może być numeryczna, a jej typ narzuca sposób porównania. wyrażenie NOT IN (wartość1,...) : równoważne NOT (wyrażenie IN (wartość1,...)). mysql> SELECT 2 IN (0,3,5,7); -> 0 mysql> SELECT 'wefwf' IN ('wee','wefwf','weg'); -> 1

11 wyrażenie1 LIKE wyrażenie2 : porównanie wzorców, w których budowie można korzystać z metaznaków % (oznaczającego dowolną liczbę - w tym zero - dowolnych znaków), oraz _ (oznaczającego dowolny pojedynczy znak). Aby we wzorcu umieścić któryś z metaznaków jako znak dosłowny, należy go poprzedzić znakiem \. wyrażenie1 NOT LIKE wyrażenie2 : równoważne NOT (wyrażenie1 LIKE wyrażenie2).

12 mysql> SELECT 'David!' LIKE 'David_'; -> 1 mysql> SELECT 'David!' LIKE '%D%v%'; -> 1 mysql> SELECT 'David!' LIKE 'David\_'; -> 0 mysql> SELECT 'David_' LIKE 'David\_'; -> 1 mysql> SELECT 'abc' LIKE 'ABC'; -> 1 mysql> SELECT 'abc' LIKE BINARY 'ABC'; -> 0

13 STRCMP(napis1, napis2) - zwraca 0 jeżeli napisy są jednakowe, -1 jeżeli pierwszy argument jest wcześniejszy według obowiązującego porządku sortowania, a w przeciwnym wypadku +1. mysql> SELECT STRCMP('napis', 'napis2'); | STRCMP('napis1', 'napis2') | | -1 | mysql> SELECT STRCMP('napis', 'napis'); | STRCMP('napis', 'napis') | | 0 | mysql> SELECT STRCMP('napis2', 'napis'); | STRCMP('napis2', 'napis') | | 1 |

14 wyrażenie1 REGEXP wyrażenie2 : porównanie wzorców zbudowanych zgodnie ze składnią wyrażeń regularnych. Znaki \ w wartościach napisowych MySQL mających służyć za wyrażenia regularne muszą być podwojone (\\) aby były interpretowane według składni wyrażeń regularnych. MySQL dopuszcza jako równoważną notację wyrażenie1 RLIKE wyrażenie2. wyrażenie1 NOT REGEXP wyrażenie2 : równoważne NOT (wyrażenie1 REGEXP wyrażenie2).

15 Nazwy zaczynające się na 'b' : mysql> SELECT personelnr, nazwisko FROM personel WHERE nazwisko REGEXP '^b'; | personelnr | nazwisko | | SB20 | Bober | | SB23 | Biały | | SL32 | Brzęczyk |

16 Nazwy zaczynające się od małej litery: mysql> SELECT nazwisko FROM personel WHERE nazwisko REGEXP BINARY '^b'; Empty set (0.03 sec)

17 Nazwy kończące się na 'ka' : mysql> SELECT personelnr, nazwisko FROM personel WHERE nazwisko REGEXP 'ka$'; | personelnr | nazwisko | | SB22 | Kowalska | | SB30 | Michalska | | SL31 | Lisicka |

18 Nazwy zawierające 'w' : SELECT personelnr, nazwisko FROM personel WHERE nazwisko REGEXP 'w'; mysql> SELECT personelnr, nazwisko FROM personel WHERE nazwisko REGEXP 'w'; | personelnr | nazwisko | | SB21 | Frankowski | | SB22 | Kowalska | | SB31 | Piotrowski | | SL20 | Nowak | | SL21 | Kowalski | | SL30 | Wiśniewski |

19 Dopasowanie sekwencji składającej się z zero lub więcej znaków ( a* ): mysql> SELECT 'Ban' REGEXP '^Ba*n'; -> 1 mysql> SELECT 'Baaan' REGEXP '^Ba*n'; -> 1 mysql> SELECT 'Bn' REGEXP '^Ba*n'; -> 1 Dopasowanie sekwencji składającej się z jednego lub więcej znaków ( a+ ): mysql> SELECT 'Ban' REGEXP '^Ba+n'; -> 1 mysql> SELECT 'Bn' REGEXP '^Ba+n'; -> 0

20 Funkcje operujące na liczbach: ABS() mysql> SELECT ABS(2); -> 2 mysql> SELECT ABS(-32); -> 32 ACOS() mysql> SELECT ACOS(1); -> 0 mysql> SELECT ACOS(1.0001); -> NULL podobnie ASIN()

21 ATAN() mysql> SELECT ATAN(2); -> mysql> SELECT ATAN(-2); -> CEIL() synonim CEILING() mysql> SELECT CEILING(1.23); -> 2 mysql> SELECT CEILING(-1.23); -> -1 CONV(N,from_base,to_base) mysql> SELECT CONV('a',16,2); -> '1010' mysql> SELECT CONV('6E',18,8); -> '172' mysql> SELECT CONV(-17,10,-18); -> '-H'

22 COS() mysql> SELECT COS(PI()); -> -1 podobnie SIN() COT() mysql> SELECT COT(12); -> mysql> SELECT COT(0); -> NULL podobnie TAN() DEGREES() mysql> SELECT DEGREES(PI()); -> 180 mysql> SELECT DEGREES(PI() / 2); -> 90

23 EXP() mysql> SELECT EXP(2); -> mysql> SELECT EXP(-2); -> mysql> SELECT EXP(0); -> 1 FLOOR() mysql> SELECT FLOOR(1.23); -> 1 mysql> SELECT FLOOR(-1.23); -> -2 LN() synonim LOG() mysql> SELECT LN(2); -> mysql> SELECT LN(-2); -> NULL

24 LOG10() mysql> SELECT LOG10(2); -> mysql> SELECT LOG10(100); -> 2 LOG2() mysql> SELECT LOG2(65536); -> 16 LOG(B,X) logarytm z X o pdstawie B mysql> SELECT LOG(2,65536); -> 16 mysql> SELECT LOG(10,100); -> 2

25 MOD(N,M), N % M, N MOD M – zwraca resztę z dzielenia N przez M mysql> SELECT MOD(234, 10); -> 4 mysql> SELECT 253 % 7; -> 1 mysql> SELECT MOD(29,9); -> 2 mysql> SELECT 29 MOD 9; -> 2 mysql> SELECT MOD(34.5,3); -> 1.5 PI() – w obliczeniach dostępna pełna podwójna precyzja mysql> SELECT PI(); -> mysql> SELECT PI() ; ->

26 POW() synonim POWER() mysql> SELECT POW(2,2); -> 4 mysql> SELECT POW(2,-2); -> 0.25 RADIANS() – zamienia stopnie na radiany mysql> SELECT RADIANS(90); -> RAND() – zwraca losową liczbę zmiennoprzecinkową z zakresu 0 <= v < 1.0 mysql> SELECT RAND(); -> mysql> SELECT RAND(); -> mysql> SELECT RAND(); ->

27 ROUND(X), ROUND(X,D) mysql> SELECT ROUND(-1.23); -> -1 mysql> SELECT ROUND(-1.58); -> -2 mysql> SELECT ROUND(1.58); -> 2 mysql> SELECT ROUND(1.298, 1); -> 1.3 mysql> SELECT ROUND(1.298, 0); -> 1 mysql> SELECT ROUND(23.298, -1); -> 20

28 SIGN() – zwraca -1, 0, lub 1 mysql> SELECT SIGN(-32); -> -1 mysql> SELECT SIGN(0); -> 0 mysql> SELECT SIGN(234); -> 1 SQRT() mysql> SELECT SQRT(4); -> 2 mysql> SELECT SQRT(20); -> mysql> SELECT SQRT(-16); -> NULL

29 TRUNCATE() – zwraca wartość X okrojoną do N miejsc po przecinku mysql> SELECT TRUNCATE(1.223,1); -> 1.2 mysql> SELECT TRUNCATE(1.999,1); -> 1.9 mysql> SELECT TRUNCATE(1.999,0); -> 1 mysql> SELECT TRUNCATE(-1.999,1); -> -1.9 mysql> SELECT TRUNCATE(122,-2); -> 100 mysql> SELECT TRUNCATE(10.28*100,0); -> 1028

30 Funkcje operujące na napisach : CONCAT(X,Y,...) - zwraca złączenie napisów podanych jako argumenty. SELECT CONCAT(kod,' ',miasto,' ',ulica) AS adres FROM nieruchomosc mysql> SELECT CONCAT(kod,' ',miasto,' ',ulica) AS adres -> FROM nieruchomosc; | adres | | Białystok Nowa 5 | | Białystok Mała 2 | | Białystok Leśna 6 | | Białystok Dobra 18 | | Grajewo Długa 33 | | Łomża Akacjowa 6 |

31 Podaj informacje o nieruchomościach oferowanych do wynajęcia przez właścicieli zarejestrowanych w danym biurze: SELECT wlascicielnr, nieruchomoscnr, CONCAT(kod,' ',miasto,' ',ulica) AS adres, typ, czynsz FROM nieruchomosc WHERE biuronr = 'B003'; mysql> SELECT wlascicielnr AS wlasc, nieruchomoscnr AS nr, CONCAT(kod, ' ', miasto, ' ', ulica) AS adres, typ, czynsz -> FROM nieruchomosc -> WHERE biuronr = 'B003'; | wlasc | nr | adres | typ | czynsz | | CO93 | B16 | Białystok Nowa 5 | mieszkanie | 495 | | CO93 | B17 | Białystok Mała 2 | mieszkanie | 412 | | CO40 | B18 | Białystok Leśna 6 | mieszkanie | 385 | | CO87 | B21 | Białystok Dobra 18 | dom | 660 |

32 Podaj numery, adresy, typy i wysokość czynszu dla wszystkich nieruchomości z Białegostoku, wynik uporządkuj według czynszu: SELECT nieruchomoscnr AS nr, CONCAT(kod,' ', miasto,' ',ulica) AS adres, typ, czynsz FROM nieruchomosc WHERE miasto='Białystok'; mysql> SELECT nieruchomoscnr AS nr, CONCAT(kod,' ',miasto, ' ',ulica) AS adres, typ, czynsz -> FROM nieruchomosc -> WHERE miasto='Białystok'; | nr | adres | typ | czynsz | | B16 | Białystok Nowa 5 | mieszkanie | 495 | | B17 | Białystok Mała 2 | mieszkanie | 412 | | B18 | Białystok Leśna 6 | mieszkanie | 385 | | B21 | Białystok Dobra 18 | dom | 660 |

33 HEX(N_or_S) : zamienia zapis szesnastkowy na liczbę bądź odwrotnie: mysql> SELECT HEX(255); -> 'FF' mysql> SELECT 0x616263; -> 'abc' mysql> SELECT HEX('abc'); -> LENGTH(S) : zwraca długość napisu (w znakach). Synonimy: OCTET_LENGTH(S), CHAR_LENGTH(S), CHARACTER_LENGTH(S).

34 LOCATE(A, B) : jeżeli napis A stanowi część napisu B, zwraca pozycję początku pierwszego wystąpienia A w B. W przeciwnym wypadku zwraca zero. Synonimem jest POSITION(B IN A). LOCATE(A,B,C) : jeżeli napis A jest częścią napisu B występującą w pozycji dalszej niż (liczba całkowita) C, zwraca pozycję tego wystąpienia. LEFT(napis,długość) : zwraca napis składający się z długość początkowych znaków napisu. MID(napis,pozycja,długość) : zwraca napis składający się z długość znaków napisu od pozycji pozycja i o długości długość. Synonim SUBSTRING(napis,pozycja,długość)

35 RIGHT(napis,długość) : podobnie jak LEFT, lecz zwraca końcówkę napisu. Synonimem jest SUBSTRING(napis FROM długość). REPEAT(napis,liczba) : powtarza napis ilość razy liczba REPLACE(A,B,C) : zwraca napis utworzony z napisu A poprzez zastąpienie wszystkich wystąpień pod-napisu B napisem C. REVERSE(napis) : zwraca napis z odwrotną kolejnością znaków.

36 SUBSTRING(A,B,C) : zwraca napis składający się z C znaków napisu A, począwszy od znaku w pozycji B. Akceptowana jest również składnia SUBSTRING(A FROM B FOR C). TRIM([[ BOTH | LEADING |TRAILING ] [ A ] FROM ] B) : zwraca napis uzyskany z napisu B poprzez usunięcie wystąpień pod-napisu A z początku ( LEADING ), końca ( TRAILING ) lub obu końców ( BOTH ). Domyślnie stosuje opcję BOTH, i jeżeli A nie podano usuwa spacje. mysql> SELECT TRIM(' bar '); -> 'bar' mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx'); -> 'barxxx' mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx'); -> 'bar' mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz'); -> 'barx'

37 Funkcje dotyczące daty i godziny : Funkcje operujące na wartościach oznaczających daty i godziny są zbyt liczne, aby tu je wszystkie wymienić. Ograniczymy się więc na razie do kilku najbardziej użytecznych; jak zwykle, pełny opis dostępny jest w dokumentacji MySQL. CURDATE() lub CURRENT_DATE : zwraca bieżącą datę w postaci YYYY-MM-DD (rok-miesiąc-dzień), lub YYYYMMDD, w pierwszym wypadku jako napis, w drugim jako liczbę całkowitą (jeżeli kontekst wymaga konwersji do typu całkowitoliczbowego). CURTIME() lub CURRENT_TIME : zwraca bieżącą godzinę w postaci HH:MM:SS (godzina:minuta:sekunda), lub HHMMSS -- zależnie od kontekstu, podobnie jak poprzednia funkcja.

38 NOW() lub SYSDATE() lub CURRENT_TIMESTAMP : zwraca bieżącą datę i godzinę w postaci napisu YYYY-MM-DD HH:MM:SS lub liczby całkowitej YYYYMMDDHHMMSS, jeśli kontekst wymaga wartości całkowitoliczbowej. DATE_FORMAT(data, format) : konwertuje datę na napis którego format można kontrolować za pomocą napisu formatującego (tabela dalej). TIME_FORMAT(czas, format) : funkcja analogiczna do powyższej, lecz akceptująca jedynie specyfikatory formatu dotyczące godziny, minuty i sekundy.

39 mysql> SELECT DATE_FORMAT(' :23:00','%W %M %Y'); | DATE_FORMAT(' :23:00', '%W %M %Y') | | Saturday May 2016 | mysql> SELECT DATE_FORMAT(' :23:00','%H:%i:%s'); | DATE_FORMAT(' :23:00', '%H:%i:%s') | | 08:23:00 | mysql>SELECT DATE_FORMAT(' :23:00','%D %y %a %d %m %b %j'); | DATE_FORMAT(' :23:00','%D %y %a %d %m %b %j') | | 14th 16 Sat May 135 | DATE_FORMAT(data, format)

40 mysql>SELECT DATE_FORMAT(' :23:00','%H %k %I %r %T %S %w'); | DATE_FORMAT(' :23:00','%H %k %I %r %T %S %w') | | :23:00 AM 08:23: | mysql> SELECT DATE_FORMAT(' ', '%X %V'); | DATE_FORMAT(' ', '%X %V') | | | mysql> SELECT DATE_FORMAT(' ', '%d'); | DATE_FORMAT(' ', '%d') | | 14 |

41 formatopis %a skróty nazw dni tygodnia (Sun..Sat) %b skróty nazw dni miesiąca (Jan..Dec) %c miesiąc liczbowo (0..12) %D dni miesiąca z angielskimi przyrostkami (0th, 1st, 2nd, 3rd, …) %d dni miesiąca, liczbowo (00..31) %e dni miesiąca, liczbowo (0..31) %f mikrosekundy ( ) %H godzina (00..23) %h godzina (01..12) %I godzina (01..12) %i minuty, liczbowo (00..59) %j dzień roku ( ) %k godzina (0..23) %l godzina (1..12) %M nazwa miesiąca (January..December) %m miesiąc, liczbowo (00..12) %pAM lub PM

42 formatopis %r czas, 12-godzinny (hh:mm:ss według AM lub PM) %S sekundy (00..59) %s sekundy (00..59) %T czas, 24-godzinny (hh:mm:ss) %U tydzień (00..53), gdzie Sunday jest pierwszym dniem tygodnia %u tydzień (00..53), gdzie Monday jest pierwszym dniem tygodnia %V tydzień (01..53), gdzie Sunday jest pierwszym dniem tygodnia ; używane z %X %v tydzień (01..53), gdzie Monday jest pierwszym dniem tygodnia ; używane z %x %W nazwa dnia tygodnia (Sunday..Saturday) %w dzień tygodnia (0=Sunday..6=Saturday) %X tydzień roku, gdzie Sunday jest pierwszym dniem tygodnia, liczbowo, 4 cyfry ; używane z %V %x tydzień roku, gdzie Monday jest pierwszym dniem tygodnia, liczbowo, 4 cyfry ; używane z %v %Y rok, liczbowo, 4 cyfry %y rok, liczbowo ( 2 cyfry ) % dosłowny “%” znak

43 TO_DAYS(data) : zamienia datę na liczbę całkowitą oznaczającą liczbę dni od początku roku 0. Funkcja ta (oraz następna) przydają się do obliczania liczby dni jakie upłynęły między dwiema datami. FROM_DAYS(liczba) : zamienia liczbę całkowitą, interpretowaną jako liczba dni od początku roku 0, na datę (napis postaci YYYY-MM-DD ). mysql> SELECT TO_DAYS(' '); | TO_DAYS(' ') | | | mysql> SELECT FROM_DAYS(736465); | FROM_DAYS(736465) | | |

44 Funkcje dotyczące dat: ADDDATE(data,liczba_dni)- dodaje do daty określoną liczbę dni mysql> SELECT ADDDATE(' ',31); | ADDDATE(' ',31) | | |

45 - dodaje do daty przedział czasowy określony wyrażeniem wyr oraz przypisaną mu jednostką (tabela dalej) mysql> SELECT ADDDATE(' ',INTERVAL 2 MONTH); | ADDDATE(' ',INTERVAL 2 MONTH) | | | ADDDATE(data,INTERVAL wyr jednostka)

46 jednostkaOczekiwane wyrażenie MICROSECONDMICROSECONDS SECONDSECONDS MINUTEMINUTES HOURHOURS DAYDAYS WEEKWEEKS MONTHMONTHS QUARTERQUARTERS YEARYEARS SECOND_MICROSECOND'SECONDS.MICROSECONDS' MINUTE_MICROSECOND'MINUTES.MICROSECONDS' MINUTE_SECOND'MINUTES:SECONDS' HOUR_MICROSECOND'HOURS.MICROSECONDS' HOUR_SECOND'HOURS:MINUTES:SECONDS' HOUR_MINUTE'HOURS:MINUTES' DAY_MICROSECOND'DAYS.MICROSECONDS' DAY_SECOND'DAYS HOURS:MINUTES:SECONDS' DAY_MINUTE'DAYS HOURS:MINUTES' DAY_HOUR'DAYS HOURS' YEAR_MONTH'YEARS-MONTHS'

47 - synonim ADDDATE(data,INTERVAL wyr jednostka) mysql> SELECT DATE_ADD( ' :23:00',INTERVAL '-1 10' DAY_HOUR); | DATE_ADD(' :23:00', INTERVAL '-1 10' DAY_HOUR) | | :23:00 | DATE_ADD(data,INTERVAL wyr jednostka)

48 mysql> SELECT INTERVAL 1 DAY + CURDATE(); | INTERVAL 1 DAY + CURDATE() | | | mysql> SELECT INTERVAL 1 DAY + NOW(); | INTERVAL 1 DAY + NOW() | | :38:49 | INTERVAL wyr jednostka

49 mysql> SELECT ADDTIME(NOW(),'1 1:1:1'); | ADDTIME(NOW(),'1 1:1:1') | | :49:24 | mysql> SELECT ADDTIME(' :59: ','1 1:1: '); | ADDTIME(' :59: ','1 1:1: ') | | :01: | mysql> SELECT ADDTIME('01:00: ', '02:00: '); | ADDTIME('01:00: ', '02:00: ') | | 03:00: | ADDTIME(wyr1,wyr2) - do wyr1 (czas) dodaje wyr2 (czas, data-czas)

50 synonim SUBDATE(data,INTERVAL wyr jedn) mysql> SELECT DATE_SUB(' ', INTERVAL 31 DAY); | DATE_SUB(' ', INTERVAL 31 DAY) | | | mysql> SELECT DATE_SUB(' ', INTERVAL 31 DAY); | DATE_SUB(' ', INTERVAL 31 DAY) | | | DATE_SUB(data,INTERVAL wyr jedn)

51 mysql> SELECT DATE_SUB(' ', INTERVAL 2 MONTH); | DATE_SUB(' ', INTERVAL 2 MONTH) | | | mysql> SELECT DATE_SUB(' ', INTERVAL 2 QUARTER); | DATE_SUB(' ', INTERVAL 2 QUARTER) | | | mysql> SELECT DATE_SUB(' ', INTERVAL 31 DAY); | DATE_SUB(' ', INTERVAL 31 DAY) | | NULL |

52 – różnica od wyr1 do wyr2 w dniach mysql> SELECT DATEDIFF(' ',' '); | DATEDIFF(' ',' ') | | 375 | mysql> SELECT DATEDIFF(' ',' '); | DATEDIFF(' ',' ') | | -22 | DATEDIFF(wyr1,wyr2)

53 Funkcje dodatkowe: DAY(data) synonim DAYOFMONTH(data) DAYNAME(data) DAYOFWEEK(data) (1 = Sunday, 2 = Monday, …, 7 = Saturday) DAYOFYEAR(data) mysql> SELECT DAY(' '); | DAY(' ') | | 14 | mysql> SELECT DAYNAME(' '); | DAYNAME(' ') | | Saturday |

54 mysql> SELECT DAYOFWEEK( ' ' ); | DAYOFWEEK(' ') | | 7 | mysql> SELECT DAYOFYEAR( ' ' ); | DAYOFYEAR(' ') | | 135 |

55 EXTRACT(jednostka FROM data) - tabela str 41 mysql> SELECT EXTRACT(YEAR FROM ' '); | EXTRACT(YEAR FROM ' ') | | 2016 | mysql> SELECT EXTRACT(YEAR_MONTH FROM ' :02:03'); | EXTRACT(YEAR_MONTH FROM ' :02:03') | | | mysql> SELECT EXTRACT(DAY_MINUTE FROM ' :07:38'); | EXTRACT(DAY_MINUTE FROM ' :07:38') | | |

56 HOUR(czas) MINUTE(czas) SECOND(czas) mysql> SELECT HOUR('10:25:43'); -> 10 mysql> SELECT MINUTE('10:25:43'); -> 25 LAST_DAY(data) – ostatni dzień miesiąca z daty SELECT LAST_DAY(' '); -> ' ' mysql> SELECT LAST_DAY(' '); -> ' '

57 MAKEDATE(rok,dzień_roku) - tworzy datę mysql> SELECT MAKEDATE(2016,31), MAKEDATE(2016,32); | MAKEDATE(2016,31) | MAKEDATE(2016,32) | | | | mysql> SELECT MAKEDATE(2016,365), MAKEDATE(2015,365); | MAKEDATE(2016,365) | MAKEDATE(2015,365) | | | |

58 MONTH(data)MONTHNAME(data) QUARTER(data)YEAR(data) mysql> SELECT MONTH(' '); -> 5 mysql> SELECT MONTHNAME(' '); | MONTHNAME(' ') | | May | mysql> SELECT QUARTER (' '); -> 2 mysql> SELECT YEAR(' '); -> 2016

59 mysql> SELECT WEEKDAY(' '); | WEEKDAY(' ') | | 5 | mysql> SELECT WEEKOFYEAR(' '); | WEEKOFYEAR(' ') | | 19 | WEEKDAY(data) (0 = Monday, 1 = Tuesday, … 6 = Sunday) WEEKOFYEAR(data) odpowiednik polecenia WEEK(data,3)

60 TrybPierwszy dzień tygodniaZakres1 tygodniem jest tydzień... 0Sunday0-53z niedzielą w tym roku 1Monday0-53z więcej niż 3 dniami w tym roku 2Sunday1-53z niedzielą w tym roku 3Monday1-53z więcej niż 3 dniami w tym roku 4Sunday0-53z więcej niż 3 dniami w tym roku 5Monday0-53z poniedziałkiem w tym roku 6Sunday1-53z więcej niż 3 dniami w tym roku 7Monday1-53z poniedziałkiem w tym roku WEEK(data[,tryb]) mysql> SELECT WEEK(' '); -> 19 mysql> SELECT WEEK(' ',0); -> 19 mysql> SELECT WEEK(' ',1); -> 19 mysql> SELECT WEEK(' '); -> 19 mysql> SELECT WEEK(' ',0); -> 19 mysql> SELECT WEEK(' ',1); -> 20

61 Ćwiczenie 1 Podaj liczbę wizyt w nieruchomościach w kolejnych dniach poprzedniego miesiąca kalendarzowego: SELECT FROM WHERE ;

62 Ćwiczenie 2 Podaj informacje o wynajęciach nieruchomości, których termin końcowy upłynie w następnym miesiącu: SELECT FROM WHERE ;

63 Ćwiczenie 3 Podaj liczbę umów najmu zawartych w biurach w Łomży na okres krótszy niż jeden rok: SELECT FROM WHERE ;

64 Ćwiczenie 4 Podaj liczbę umów najmu zawartych w biurach w Białymstoku na okres krótszy niż jeden rok: SELECT FROM WHERE ;

65 Ćwiczenie 5 Podaj którzy klienci nie wizytowali nieruchomości w ciągu ostatniego kwartału kalendarzowego: SELECT FROM WHERE ;

66 Ćwiczenie 6 Podaj którzy klienci wizytowali nieruchomości w ciągu ostatniego kwartału kalendarzowego: SELECT FROM WHERE ;

67 Ćwiczenie 7 Podaj ile było wynajęć nieruchomości dla każdego typu w ciągu ostatniego roku kalendarzowego w kolejności malejącej: SELECT FROM WHERE ;