DB2 for IBM i V6R1を使用していますが、数値の有効な表現が含まれることがある文字列値を数値に変換しようとしています。私が思いついたのはこれでした:
select onorno, onivrf, coalesce(cast(substr(onivrf,1,5) as numeric),99999) as fred
from oinvol
ONIVRFフィールドに「00111-11」のようなデータがある場合もあれば、「FREIGHT」のようなデータがある場合もあります。
ドキュメントは、次のようなデータについては次のように信じています。
ONORNO ONIVRF
12 11010-11
13 FREIGHT
14 00125-22
次のような出力が得られるはずです。
ONORNO ONIVRF FRED
12 11010-11 11010
13 FREIGHT 99999
14 00125-22 125
代わりに、私はこれを取得しています:
ONORNO ONIVRF FRED
12 11010-11 11010
13 FREIGHT NULL
14 00125-22 125
(をスキップしてcoalesce()
を使用するとCast(substr(onivrf(1,5) as numeric)
、まったく同じ結果が得られます。)
私はここで何が間違っているのですか?