Ein numerisches Datum kann nur per Cast umgewandelt werden:

date(substr(digits(numdate), 1, 4) concat '-' concat substr(digits(numdate), 5, 2) concat '-' concat substr(digits(numdate), 7, 2))

Für die Abfrage, wenn der Parameter ein Datum ist musst du umgekehrt arbeiten:

year(?) * 10000 + month(?) * 100 + day(?)

Hierbei ist natürlich das Problem, dass für jedes "?" ein Parameter übergeben werden muss.

Ab V5R3 geht auch folgendes für Datum nach JJJJMMTT:

dec(replace(char(?, iso), '-', ''))

Für Decimal nach Datum gibts leider keinen neuen Weg.
Alternativ kannst du dir auch eigene SQL-Funktionen für dieses Problem schreiben.