Werken met data en tijden
Een database is uitermate geschikt om te werken met data en tijden. Het rekenen met deze gegevens is in de database heel gemakkelijk. Vandaar ook dat we dit zoveel mogelijk aan de database willen overlaten.
Om goed te kunnen werken met data en tijden is het van belang dat je het juiste datatype kiest voor deze gegevens. Een datum sla je op in een DATE veld, een tijd in een TIME veld en een combinatie van een datum en tijd komt in een DATETIME veld te staan.
Opmerking: deze datatypen zijn specifiek voor MySQL. Andere databases kennen weer andere datatypes voor data en tijden.
Formatteren van een datum (SQL)
De geboortedatum van onze werknemers staat nu in het formaat yyyy-mm-dd in de tabel, overigens het enige geldige formaat voor een datum. Maar de kans is groot dat we de datum niet in dit formaat op het scherm willen zetten.
Met behulp van de MySQL functie DATE_FORMAT() kunnen we daarom het formaat van de datum aanpassen bij het selecteren van de gegevens. Dit doen we als volgt:
2
3
4
5
6
7
8
9
10
| voornaam | newDate |
+----------+------------+
| Nico | 24-03-1958 |
| Tim | 30-01-1982 |
| Pim | 20-12-1980 |
| Joost | 20-10-1974 |
| Thomas | 12-06-1970 |
| Niels | 18-08-1979 |
+----------+------------+
De functie DATE_FORMAT() accepteert twee parameters. Allereerst de kolom waarin de datum opgeslagen is en ten tweede het formaat waarin de datum gezet moet worden. Een overzicht met alle parameters die je daarin kunt gebruiken zijn te vinden in de MySQL handleiding.
Nadat je de functie toegepast hebt, geef je dat gegeven een alias. Op die manier kun je hem selecteren in de resultaat set. Zorg dat je de naam van de alias niet hetzelfde kiest als een bestaande kolomnaam, aangezien dat verderop in de query problemen kan opleveren.
In de output zien we dat de datum nu inderdaad in het nieuwe formaat weergegeven wordt.
Formatteren van een datum (PHP)
Als we dit willen gebruiken in PHP verandert er natuurlijk niets aan de query. Het zal er dus als volgt uit komen te zien:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
require_once 'db_config.php';
$sql = "
SELECT
voornaam,
DATE_FORMAT(geboortedatum, '%d-%m-%Y') AS newDate
FROM
werknemers
";
if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
elseif(mysql_num_rows($res) == 0)
{
echo 'Geen records gevonden.';
}
else
{
while($row = mysql_fetch_assoc($res))
{
echo $row['voornaam'].' ('.$row['newDate'].') <br />';
}
}
?>
2
3
4
5
6
Tim (30-01-1982)
Pim (20-12-1980)
Joost (20-10-1974)
Thomas (12-06-1970)
Niels (18-08-1979)
Rekenen met data en tijden (SQL)
Het is mogelijk om de geboortedatum kolom op te nemen in een WHERE clausule en er een vergelijking mee uit te voeren. Stel dat we bijvoorbeeld de werknemers op willen halen die na 1 januari 1980 geboren zijn:
2
3
4
5
6
7
voornaam,
DATE_FORMAT(geboortedatum, '%d-%m-%Y') AS newDate
FROM
werknemers
WHERE
geboortedatum > '1980-01-01'
2
3
4
5
6
| voornaam | newDate |
+----------+------------+
| Tim | 30-01-1982 |
| Pim | 20-12-1980 |
+----------+------------+
Zoals verwacht zijn in de output alleen de gegevens van de werknemers, die in 1980 of later geboren zijn, te zien.
Huidige datum en tijd (SQL)
MySQL kent een tweetal functies die de de huidige datum en tijd teruggeven. De functie NOW() geeft een datumtijd-stempel terug waarin dus zowel een datum als tijd te vinden zijn. De functie CURDATE() geeft enkel de huidige datum terug.
De gebruik ervan in de query is bijvoorbeeld als volgt:
Op deze manier zou je dus de huidige datumtijd-stempel in kunnen voegen in de database. Ga dus niet meer in PHP met de date() functie aan de gang, dit is veel makkelijker.
Meer datum- en tijdfuncties
De toepassingen van het rekenen met data en tijdens die ik hier heb laten zien, zijn nog maar een klein topje van een hele grote ijsberg. Dit onderwerp is veel te uitgebreid om hier te bespreken, dus wil ik je graag doorverwijzen naar een van de volgende links:
Datum- en tijdfunctie in MySQL (tutorial)
MySQL handleiding
Inhoudsopgave
- Inleiding
- De eerste tabel
- De database benaderen vanuit PHP
- Invoegen van records
- Selecteren van records
- Wijzigen van records
- Verwijderen van records
- Sleutels en constraints
- Selecteren uit meerdere tabellen: JOINS
- Werken met data en tijden
- Aggregate functies en GROUP BY
- Debuggen: het oplossen van SQL fouten
- Slotwoord en referenties