Datumfuncties in MySQL#
SQL datum- en tijdfuncties#
Het rekenen met datums en tijden in SQL is vrij complex, met aparte “INTERVAL” waarden. Er zijn ontzettend veel mogelijkheden met datumfuncties. Een overzicht vind je hier:
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
Hieronder geven we de MySQL voorbeelden.
Sysdate#
Met SYSDATE()
haal je de systeemdatum op, de datum van vandaag. Hetzelfde bereik je min of meer met NOW()
, LOCALTIME
of LOCALTIMESTAMP
. Er zijn subtiele verschillen.
SELECT SYSDATE(), NOW(), LOCALTIME, LOCALTIMESTAMP;
Day#
Met DAY()
haal je het nummer van de dag op van een datum.
SELECT last_name, hire_date, DAY(hire_date)
FROM employees
WHERE last_name = 'King';
Als je de naam van de dag wil, dan gebruik je DAYNAME()
.
SELECT last_name, hire_date, DAYNAME(hire_date)
FROM employees
WHERE last_name = 'King';
Month#
Met MONTH()
haal je het nummer van de maand op van een datum.
SELECT last_name, hire_date, MONTH(hire_date)
FROM employees
WHERE last_name = 'King';
Als je de naam van de maand wil, dan gebruik je MONTHNAME.
SELECT last_name, hire_date, MONTHNAME(hire_date)
FROM employees
WHERE last_name = 'King';
Year#
Met YEAR()
haal je het jaar op van een datum.
SELECT last_name, hire_date, YEAR(hire_date)
FROM employees
WHERE last_name = 'King';
Op deze manier kun je datums van elkaar aftrekken. Bij jaren wordt dan de uitkomst naar beneden afgerond.
SELECT last_name, YEAR(hire_date), YEAR(NOW()), YEAR(NOW())-YEAR(hire_date) AS dienstjaren
FROM employees
WHERE last_name = 'King';
Date_add#
Met DATE_ADD
kun je dagen, maanden of jaren toevoegen aan een datum. Met INTERVAL
geef je aan wat en hoeveel je wil toevoegen. In onderstaande voorbeelden wordt achtereenvolgens 6 dagen, 6 maanden en 6 jaar toegevoegd aan de hire_date.
SELECT last_name, hire_date, DATE_ADD(hire_date, INTERVAL 6 DAY)
FROM employees
WHERE last_name = 'King';
SELECT last_name, hire_date, DATE_ADD(hire_date, INTERVAL 6 MONTH)
FROM employees
WHERE last_name = 'King';
SELECT last_name, hire_date, DATE_ADD(hire_date, INTERVAL 6 YEAR)
FROM employees
WHERE last_name = 'King';
Timestampdiff#
Met TIMESTAMPDIFF()
kun je het verschil tussen twee datums uitrekenen, bijvoorbeeld in jaren of maanden.
SELECT last_name, hire_date, TIMESTAMPDIFF(YEAR, hire_date, SYSDATE())
FROM employees
WHERE last_name = 'King';
SELECT last_name, hire_date, TIMESTAMPDIFF(MONTH, hire_date, SYSDATE())
FROM employees
WHERE last_name = 'King';
Date_format#
Datumvelden kun je op allerlei mogelijke manieren vormgeven met DATE_FORMAT()
. Een overzicht van alle mogelijkheden vind je hier:
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format
SELECT last_name, hire_date, DATE_FORMAT(hire_date, '%d %M %Y')
FROM employees
WHERE last_name = 'King';
Als je de uitvoer in het Nederlands wil, dan kun je met een SET
de local time name op Nederlands zetten. In dit voorbeeld zie je dan juni in het Nederlands in plaats van June in het Engels. Let op dat er op het eind van de SET
een puntkomma staat! Het zijn dus eigenljk twee commando’s achter elkaar. Je kunt de SET regel ook los invoeren en dan werkt de instelling zolang je in dezelfde sessie bent. Als je de beheerder zou zijn van de database, dan kun je deze SET vastleggen zodat je altijd de uitvoer in het Nederlands hebt.
SET lc_time_names = 'nl_NL';
SELECT last_name, hire_date, DATE_FORMAT(hire_date, '%d %M %Y')
FROM employees
WHERE last_name = 'King';