Hey,

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') <=...
                                         ^
Een reden dus om over te stappen naar pgSQL
Nu nog kijken of m'n host dit wel geinstalleerd heeft :)
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.

Reageren