Beim STRSQL werden dir die Daten sogar alle angezeigt, falsche Werte führen nicht zum Abbruch.
In embedded SQL kann man dann leider nicht weiterlesen auch wenn man einen NULL-Anzeiger verwendet (was macht also STRSQL da anders?).

In der Where-Klausel wird ein Tabelscan durchgeführt.
Bis V5R4 konnte man mit einem Case-Ausdruck die fehlerhaften Sätze ausschließen.
Seit V6R1 klappt das nicht immer, da die SQE die Ausdrücke (ins besonders AND-Beziehungen) ggf. in einer anderen Reihenfolge auswertet, also erst den cast und dann den Ausschluss.
Dieses Problem hatte ich leider nach der Umstellung von V5R4 auf V6R1.
Auch eine View (CTE, derived Table) hilft da nicht, da die CQE hier alles optimiert.

Da es in SQL leider keine Fehlerbehandlung gibt, musst du für solche Dinge eine UDF schreiben, die dir die Fehler dann auch abfängt.
Zeitkritischer ist das auch nicht, da du sowieso nicht über einen Index für diesen Ausdruck gehen kannst.