Datumfuncties in SQLite#
%LOAD ../data/employees.db
De datum- en tijdfuncties in SQLite wijken nogal af van die in (My)SQL. Een uitgebreide beschrijving van de SQLite functies vind je hier:
We geven hieronder een aantal voorbeelden van veelvoorkomende gevallen.
Datum en tijd als TEXT#
De basisfuncties voor datum en tijd in TEXT-formaat (ISO-8601) zijn:
DATE - geeft de datum (als TEXT)
TIME - geeft de tijd, zonder datum (als TEXT)
DATETIME - geeft de combinatie van datum en tijd (als TEXT)
Met deze functies kun je via “modifiers” ook rekenen met tijd, bijvoorbeeld 30 dagen verder, 2 maanden eerder, enzovoorts.
SELECT DATE('now');
DATE('now') |
---|
2023-11-07 |
SELECT DATE ('now', 'start of year');
DATE ('now', 'start of year') |
---|
2023-01-01 |
SELECT TIME ('now');
TIME ('now') |
---|
08:47:12 |
SELECT DATETIME('now', "+10 days")
DATETIME('now', "+10 days") |
---|
2023-11-17 08:47:12 |
Datum en tijd als getal#
De volgende functies geven de datum/tijd als getal: daarmee kun je eenvoudig rekenen, als het om dagen of seconden gaat:
JULIANDAY - geeft de datum/tijd als getal (aantal dagen sinds 12:00 uur op 24 november 4714 B.C.)
UNIXEPOCH - geeft de datum/tijd als getal (Unix timestamp: seconden sinds 1 jan 1970)
SELECT JULIANDAY('now', "-1 month");
JULIANDAY('now', "-1 month") |
---|
2460224.86611851 |
SELECT UNIXEPOCH('now');
UNIXEPOCH('now') |
---|
1699346832 |
Deze getallen kun je omzetten in (ISO) TEXT-formaat met de eerder genoemde DATE/TIME/DATETIME functies:
SELECT DATETIME(UNIXEPOCH('now'), 'unixepoch');
DATETIME(UNIXEPOCH('now'), 'unixepoch') |
---|
2023-11-07 08:47:12 |
Idem, voor Juliaanse tijd (getal):
SELECT DATETIME(JULIANDAY('now'));
DATETIME(JULIANDAY('now')) |
---|
2023-11-07 08:47:12 |
strftime#
Met de functie strftime(format, datetime)
kun je het TEXT-formaat van de datum/tijd aanpassen, bijvoorbeeld om een onderdeel te selecteren (zoals “dag”, “maand”, “jaar”).
**Dag. **Met het format %d
krijg je het nummer van de dag in de maand van een datum:
SELECT last_name, hire_date, strftime('%d', hire_date) as day
FROM employees
WHERE last_name = 'King';
last_name | hire_date | day |
---|---|---|
King | 1987-06-17 | 17 |
Weekdag. Als je de dag in de week wilt (met zondag = 0), gebruik je %w
:
SELECT last_name, hire_date, strftime('%w', hire_date) as day_in_week
FROM employees
WHERE last_name = 'King';
last_name | hire_date | day_in_week |
---|---|---|
King | 1987-06-17 | 3 |
Maand. Met het format %m
haal je het nummer van de maand op van een datum.
SELECT last_name, hire_date, strftime('%m', hire_date) as month
FROM employees
WHERE last_name = 'King';
last_name | hire_date | month |
---|---|---|
King | 1987-06-17 | 06 |
Jaar. Met het format %Y
YEAR haal je het jaar op van een datum.
SELECT last_name, hire_date, strftime('%Y', hire_date) as year
FROM employees
WHERE last_name = 'King';
last_name | hire_date | year |
---|---|---|
King | 1987-06-17 | 1987 |
Opmerking. SQLite heeft geen mogelijkheid om maanden of weekdagen te benoemen. Als dat nodig is, kun je de getallen via een CASE
constructie omzetten in de gewenste namen.