Hi,
Zunächst: ich nutze MySQL in verschiedenen Versionen, in Produktion ist eine MySQL v5.0.26, auf dem das ganze dann auch funktionieren sollte.
Ich habe tlw. das Problem, den größten aus einer festen Menge aus Werten zu ermitteln.
MySQL bietet dafür die Funktion GREATEST()
an. Leider liefert diese NULL
, wenn einer der übergebenen Werte NULL
ist.
Um dies zu umgehen, habe ich mir eine Funktion geschrieben, welche das von mir gewünschte Verhalten (NULL
"ignorieren") zeigt.
DROP FUNCTION IF EXISTS GREATEST_N_DATETIME;
CREATE FUNCTION GREATEST_N_DATETIME(a DATETIME, b DATETIME) RETURNS DATETIME
BEGIN
IF a IS NULL THEN
RETURN b;
ELSEIF b IS NULL THEN
RETURN a;
END IF;
-- now we can safely assume that both a and b are not NULL
RETURN GREATEST(a,b);
END;
Nun geht das erstmal nur mit zwei Parametern, und auch nur für den von mir gewählten Datentyp (was erstmal sekundär ist, da ich es erstmal nur für DATETIME
s nutze).
Gibt es eine Möglichkeit, das ganze so generisch zu implementieren, dass es sowohl mit mehr Parametern geht und/oder mit anderen Datentypen aufrufbar ist?
Bei der Frage nach mehr Parametern wäre die Standard-Vorgehensweise in anderen Sprachen entweder die Funktion überladen oder Default-Werte für die "hinteren" Parameter vorgeben.
Beides scheint in Standard-SQL/MySQL-SQL nicht möglich.
Sieht irgendjemand einen Weg, wie ich es trotzdem schaffen könnte?
Bis die Tage,
Matti