Если вы просто пытаетесь избавиться от ONIVRF
s, которые являются буквенными символами, вы можете сделать что-то вроде этого:
SELECT ONORNO, ONIVRF,
CASE
WHEN UCASE(SUBSTR(ONIVRF,1,5)) = LCASE(SUBSTR(ONIVRF,1,5)) THEN CAST(SUBSTR(ONIVRF,1,5) AS NUMERIC)
ELSE 99999
END AS fred
FROM OINVOL
Это немного глупо, потому что у DB2 нет эквивалента ISNUMERIC()
. Но буквенные символы - единственные, которые будут переведены функциями верхнего и нижнего регистра.
Я протестировал это в DB2 для z / OS (v9), и это сработало, но я не уверен, что DB2 для iSeries точно такой же. В моем случае это было сделано, как сказал @Joe Stefanelli, и выдало ошибку при попытке привести буквенную строку к NUMERIC
.
Edit:
Это может сработать лучше (при условии, что у вас не будет никаких ONIVRF
с тильдами). Не должно возникнуть проблемы, когда в @ X-Zero упоминается, что некоторые символы на языках, отличных от английского, не имеют строчных и прописных букв.
SELECT ONORNO, ONIVRF,
CASE
WHEN TRANSLATE(ONIVRF, '~~~~~~~~~~~', '0123456789-') = '~~~~~~~~' THEN CAST(SUBSTR(ONIVRF,1,5) AS NUMERIC)
ELSE 99999
END AS fred
FROM OINVOL