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.