
150 MySQL - Technische Referenz f¨ur Version 5.0.1-alpha
Ein bisschen komplizierter ist es, wenn der aktuelle Monat Dezember ist. Hier k¨onnen Sie
nicht einfach eins zur Monatszahl (12) hinzuf¨ugen, weil es keinen 13. Monat gibt. Statt
dessen suchen Sie nach Tieren, die im Januar (Monat 1) geboren sind.
Sie k¨onnen die Anfrage sogar so schreiben, dass sie unabh¨angig davon funktioniert, was
der aktuelle Monat ist. Auf diese Art brauchen Sie keine bestimmte Monatszahl in der
Anfrage benutzen. DATE_ADD() erlaubt Ihnen, einem gegebenen Datum ein Zeitintervall
hinzuzuf¨ugen. Wenn Sie dem Wert von NOW() einen Monat hinzuf¨ugen und dann den
Monatsanteil mit MONTH() extrahieren, ergibt das den Monat, der die kommenden Geburt-
stage enth¨alt:
mysql> SELECT name, geburtstag FROM pet
-> WHERE MONTH(geburtstag) = MONTH(DATE_ADD(NOW(), INTERVAL 1 MONTH));
Eine andere M¨oglichkeit, diese Aufgabe zu erf¨ullen, ist, 1 zu addieren, um den n¨achsten
Monat nach dem aktuellen zu erhalten (nach Gebrauch der Modulo-Funktion (MOD), um
den Monatswert auf 0 zu stellen, falls er aktuell 12) ist:
mysql> SELECT name, geburtstag FROM pet
-> WHERE MONTH(geburtstag) = MOD(MONTH(NOW()), 12) + 1;
MONTH gibt eine Zahl zwischen 1 und 12 zur¨uck. MOD(irgendwas,12) gibt eine Zahl zwischen
0 und 11 zur¨uck. Daher muss die Addition nach MOD() erfolgen, weil wir ansonsten von
November (11) bis Januar (1) gehen w¨urden.
4.3.4.6 Mit NULL-Werten arbeiten
Der NULL-Wert birgt
¨
Uberraschungen, bis Sie mit ihm vertraut sind. Konzeptionell bedeutet
NULL einen fehlenden oder unbekannten Wert. Er wird in einiger Hinsicht anders als andere
Werte behandelt. Um auf NULL zu testen, k¨onnen Sie nicht die arithmetischen Vergleich-
operatoren wie =, < oder != verwenden. Um sich das zu veranschaulichen, probieren Sie
folgenden Anfrage:
mysql> SELECT 1 = NULL, 1 != NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 != NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
Wie man sieht, erh¨alt man aus diesen Vergleichen keine sinnvollen Ergebnisse. Benutzen
Sie statt dessen die IS NULL- und IS NOT NULL-Operatoren:
mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
| 0 | 1 |
+-----------+---------------+
In MySQL bedeutet 0 oder NULL logisch Falsch und alles sonstige bedeutet logisch Wahr.
Der vorgabem¨aßige Wahrheitswert einer Boolschen Operation ist 1.
Komentáře k této Příručce