O interogare similara poate fi folosita pentru a determina varsta decesului, in cazul animalelor care au murit. Vei determina care anume sunt aceste animale verificand daca valoarea pentru death este NULL. Apoi, pentru cele cu valori non-NULL, calculeaza diferenta dintre valorile aferente campurilor death si birth:
mysql> SELECT name, birth, death,
-> (YEAR(death)-YEAR(birth)) - (RIGHT(death,5)<RIGHT(birth,5))
-> AS age
-> FROM pet WHERE death IS NOT NULL ORDER BY age;
+--------+------------+------------+------+
| name | birth | death | age |
+--------+------------+------------+------+
| Bowser | 1989-08-31 | 1995-07-29 | 5 |
+--------+------------+------------+------+
Interogarea va utiliza mai degraba death IS NOT NULL decat death <> NULL intrucat NULL este o valoare aparte care nu poate fi comparata folosind operatorii obisnuiti de comparare. Acest aspect este discutat mai tarziu.
Dar daca doresti sa afli ce animale au ziua de nastere in cursul lunii curente? Pentru acest tip de calcul, anul si ziua sunt irelevante; nu doresti decat sa extragi partea corespunzatoare lunii din coloana birth. MySQL asigura mai multe functii pentru extragerea partilor din date, cum ar fi YEAR(), MONTH(), si DAYOFMONTH(). MONTH() este functia adecvata acestui caz. Pentru a vedea cum functioneaza, ruleaza o interogare simpla ce afiseaza atat valoarea lui birth , cat si a lui MONTH(birth):
mysql> SELECT name, birth, MONTH(birth) FROM pet;
+----------+------------+--------------+
| name | birth | MONTH(birth) |
+----------+------------+--------------+
| Fluffy | 1993-02-04 | 2 |
| Claws | 1994-03-17 | 3 |
| Buffy | 1989-05-13 | 5 |
| Fang | 1990-08-27 | 8 |
| Bowser | 1989-08-31 | 8 |
| Chirpy | 1998-09-11 | 9 |
| Whistler | 1997-12-09 | 12 |
| Slim | 1996-04-29 | 4 |
| Puffball | 1999-03-30 | 3 |
+----------+------------+--------------+
Detectarea animalelor cu zile de nastere in urmatoarea luna este la fel de simplu. Sa presupunem ca data curenta este aprilie. Atunci, valoarea lunii este 4 si poti cauta animalele nascute in mai (luna 5) astfel:
mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = 5;
+-------+------------+
| name | birth |
+-------+------------+
| Buffy | 1989-05-13 |
+-------+------------+
Exista o oarecare complicatie daca data curenta este decembrie. Nu poti pur si simplu sa adaugi o unitate la numarul lunii (12) si sa cauti animale nascute in luna 13, deoarece nu exista o asemenea luna. In schimb, poti cauta animale nascute in ianuarie (luna 1).
Poti scrie interogarea astfel incat sa functioneze indiferent de luna curenta, astfel incat sa nu ai nevoie sa folosesti numarul unei anumite luni. DATE_ADD() iti permite sa adaugi un interval de timp unei anumite date. Daca adaugi o luna valorii CURDATE(), iar apoi extragi partea lunii cu MONTH(), rezultatul va consta in luna in cadrul careia cauti zile de nastere:
mysql> SELECT name, birth FROM pet
-> WHERE MONTH(birth) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH));
O alta modalitate de a indeplini aceeasi sarcina este sa adaugi 1 si sa obtii luna imediat urmatoare celei curente dupa ce ai folosit functia modul (MOD) pentru a reduce valoarea lunii la 0 daca aceasta este in mod curent 12:
mysql> SELECT name, birth FROM pet
-> WHERE MONTH(birth) = MOD(MONTH(CURDATE()), 12) + 1;
De remarcat ca MONTH() returneaza un numar cuprins intre 1 si 12. Iar MOD(something, 12) returneaza un numar cuprins intre 0 si 11. Astfel, adunarea trebuie efectuata dupa MOD(), caci altfel am trece de la noiembrie (11) la ianuarie (1).
MySQL furnizeaza un mecanism standard SQL de cautare de sabloane, precum si o forma de cautare de sabloane bazata pe expresii regulate extinse, similare celor utilizate de catre utilitarele Unix, cum ar fi vi, grep, si sed.
Cautarea de sabloane SQL iti permite sa folosesti "_" pentru a efectua corespondente cu orice caracter unic si "%" pentru efectua corespondente cu un numar oarecare de caractere (inclusiv caracterele nule). In MySQL, sabloanele SQL sunt predefinite in mod automat case-insensitive. Aici sunt prezentate niste exemple. De remarcat ca nu trebuie sa folosesti = sau <> atunci cand ai de-a face cu pattern-uri SQL; foloseste operatorii de comparatie LIKE sau NOT LIKE in loc.
Pentru a gasi numai animalele al caror nume incepe cu "b":
mysql> SELECT * FROM pet WHERE name LIKE "b%";
+--------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+------------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+
Pentru a gasi animalele al caror nume se termina in "fy":
mysql> SELECT * FROM pet WHERE name LIKE "%fy";
+--------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+--------+--------+---------+------+------------+-------+
Pentru a gasi numele ce contin un "w":
mysql> SELECT * FROM pet WHERE name LIKE "%w%";
+----------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+------------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
+----------+-------+---------+------+------------+------------+
|