Natürlich kannst du alles mit case abfragen.

Um ein Datum zu erstellen, musst du ein Datumsformat übergeben, am besten eben ISO 'JJJJ-MM-TT'.

z.B.:
date(
case when substr(digits(mydate), 5, 6)) < '70' then '20' else '19' end
concat '-' concat substr(digits(mydate, 3, 2)) concat '-' concat substr(digits(mydate), 1, 2)))

Mit Where-Bedingung wirds etwas kompliziert, da Ergebnisfelder zu diesem Zeitpunkt noch nicht exisitieren, der gesamte case-Ausdruck ist in diesem Fall also komplett zu wiederholen und dann auch abfragbar:

where ... and case ... end = Wert

Werden aber Felder aus Leftjoin abgefragt, macht man daraus schnell Innerjoin's, da man auch "is null" benötigt.

where (leftjoinfiled is null or leftjoinfield = Wert) ...

alternativ

where coalesce(leftjoinfield, Defaultwert) = Wert

Kombiniere dies dann nun auch noch mit case und die Übersichtlichkeit verbessert sich nicht gerade.

Am einfachsten wirds dann aber mit CTE's:

with
mySelect as (fullselect)
select * from mySelect
where ErgField=Wert

Durch "as (fullselect)" exisitieren nun die Ergebnisfelder.