Das verhindert jedoch nicht unbedingt, dass der Select abstürzt.
Der Grund liegt in der Optimierung, dass vor der Umwandlung in Dec auch ungültige Daten vorbeikommen können.

DIGITS mach aus einem numerischen Feld ein Zeichenfeld ohne Komma und Vorzeichen, also ein 11,2-Feld wird zu CHAR(11).
Durch Aotocast (s.o. 31,9) wird eben versucht, ein numerisches Feld aus dem Zeichenfeld zu generieren. Wenn da nun keine Ziffern drinstehen, knallts.

Wie ist der Wert denn genau aufgebaut?
Hast du da immer 7 Ziffern oder ist das variabel?
Bei festen Stellen kannst du den Between auch mit Zeichenkonstanten machen "between '0000000' and '9999999'".
Bei variablen Zeichenlängen geht es auch folgendermaßen:

right('0000000' concat substr(f4, 1, 7), 7) between '0000000' and '9999999'