の列を変換する必要があります。VARCHAR2
からNUMBER
に変換します。Oracle SQL:Varchar2をNumberに変換してNullを処理する
SELECT V_PDAYPROD_CRW1.MFGCELL ,
V_PDAYPROD_CRW1.MFG_TYPE ,
V_PDAYPROD_CRW1.PROD_DATE,
V_PDAYPROD_CRW1.EQNO,
V_PDAYPROD_CRW1.SHIFT,
V_PDAYPROD_CRW1.ARINVT_ID,
NVL(AVG(
TO_NUMBER(NVL(V_PDAYPROD_CRW1.CUSER1,0),9999.99)
),0) CUSER1
FROM V_PDAYPROD_CRW1
LEFT JOIN
(
SELECT REJECTS.DAY_PART_ID D_P_ID,
SUM(REJECTS.REJECTS) RE
FROM REJECTS
GROUP BY REJECTS.DAY_PART_ID
)
ON V_PDAYPROD_CRW1.PDAY_PART_ID = D_P_ID
GROUP BY V_PDAYPROD_CRW1.MFGCELL ,
V_PDAYPROD_CRW1.MFG_TYPE ,
V_PDAYPROD_CRW1.PROD_DATE,
V_PDAYPROD_CRW1.EQNO,
V_PDAYPROD_CRW1.SHIFT,
V_PDAYPROD_CRW1.ARINVT_ID
私はエラーORA-01722: invalid number
を取得しておいてください。以下は、私は彼が仕事を得ることができるかどうかを確認するために使用しています現在のSQLです。 CUSER1
の値は、ほとんどがNULL、5、0.33、0.25、1、0.1、0.42などです。
これを行うにはTO_NUMBER()
を使用しようとしていますが、 。
提案がありますか?
更新VARCHAR2をNUMBERにキャストしようとしました。私は
COALESCE(TO_NUMBER(REGEXP_SUBSTR(V_PDAYPROD_CRW1.CUSER1, '^\d+')), 0)
これは私に結果を取得している:それは私はそれが動作を取得するには、次のように使用しています
作業ガット:それでもINVALID NUMBER
SELECT V_PDAYPROD_CRW1.MFGCELL ,
V_PDAYPROD_CRW1.MFG_TYPE ,
V_PDAYPROD_CRW1.PROD_DATE,
V_PDAYPROD_CRW1.EQNO,
V_PDAYPROD_CRW1.SHIFT,
V_PDAYPROD_CRW1.ARINVT_ID,
NVL(AVG(CAST(V_PDAYPROD_CRW1.CUSER1 AS NUMBER)),0) CUSER1
FROM V_PDAYPROD_CRW1
LEFT JOIN
(
SELECT REJECTS.DAY_PART_ID D_P_ID,
SUM(REJECTS.REJECTS) RE
FROM REJECTS
GROUP BY REJECTS.DAY_PART_ID
)
ON V_PDAYPROD_CRW1.PDAY_PART_ID = D_P_ID
GROUP BY V_PDAYPROD_CRW1.MFGCELL ,
V_PDAYPROD_CRW1.MFG_TYPE ,
V_PDAYPROD_CRW1.PROD_DATE,
V_PDAYPROD_CRW1.EQNO,
V_PDAYPROD_CRW1.SHIFT,
V_PDAYPROD_CRW1.ARINVT_ID
が更新取得欲しいです。私に適切なソリューションを導いてくれてありがとう@Thorsten_Kettner。
ここではどういう意味ですか? – jarlh
申し訳ありません。私は値がNULLで、10進数(5)、2の小数点(0.33)、先行ゼロのない2小数点(.25)などの異なるフォーマットであることを説明しようとしています。 – spyr0
'AVG(NVL(V_PDAYPROD_CRW1.CUSER1,0))'を試してください。十分なはずです。 – g00dy