Ik heb een datumveld in m'n datebase. (event_date)
Nu wil ik met ondestaande query alle events ophalen tesamen met het aantal dagen wanneer dat event plaatsvind.
SELECT DATE_FORMAT(CURDATE(),'%d-%m')), DATE_FORMAT(event_date,'%d-%m'), event_short_content,event_long_content, DATEDIFF(DATE_FORMAT(CURDATE(),'%d-%m'),DATE_FORMAT(event_date,'%d-%m')) AS verschil FROM events;
deze geeft helaas NULL terug bij 'verschil'
Gaat dit niet werken of heb ik ergens een fout?
Om te beginnen kent pgSQL de functie DATE_FORMAT() niet, dus dat zal al mislukken. Maar dezelfde query waarin de pgsql functie to_char() (vergelijkbaar aan DATE_FORMAT()) gebruikt wordt, geeft ook netjes een foutmelding:
SELECT
event
FROM
events
WHERE
to_char(event_date, 'DDD') - to_char(now(), 'DDD') <= 4
Deze query geeft zoals je zou verwachten de volgende foutmelding:
ERROR: operator does not exist: text - text
LINE 3: where to_char(event_date, 'DDD') - to_char(now(), 'DDD') <=...
^
Beetje offtopic: Met de volgende functie kun je in pgSQL controleren of een jaar een schrikkeljaar is:
CREATE OR REPLACE FUNCTION isleap(int) RETURNS bool AS
$PROC$
DECLARE
year ALIAS FOR $1;
BEGIN
IF (((MOD(year, 4) = 0) AND (MOD(year, 100) <> 0)) OR (MOD(year, 400) = 0)) THEN
RETURN true;
ELSE
RETURN false;
END IF;
END;
$PROC$
LANGUAGE plpgsql;
En dan bv.
SELECT isleap(2008);
Dit levert een true op, het jaar 2007 of 1900 een false. 1900 is niet deelbaar door 400, dus géén schrikkeljaar, ondanks dat het wél deelbaar is door 4.