열을 변환해야합니다. VARCHAR2
에서 NUMBER
으로 연결됩니다. 아래는 내가 얻을 수 있는지 확인하기 위해 사용하고있는 현재의 SQL은 자신의 일을합니다 : I 오류 ORA-01722: invalid number
가 계속Oracle SQL : Varchar2를 숫자로 변환하고 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
. CUSER1
의 값은 주로 다음과 같습니다. NULL, 5, 0.33, .25, 1, .1, 0.42 등 ...
TO_NUMBER()
을 사용하려고하지만 올바르게 처리 할 수 없습니다. .
제안 사항?
업데이트 VARCHAR2를 NUMBER로 캐스팅했습니다. 여전히 INVALID 번호
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
를 받고 : 그것은업데이트
작업 당함 나는이 작업을 얻을 다음 사용하고 있습니다 :
COALESCE(TO_NUMBER(REGEXP_SUBSTR(V_PDAYPROD_CRW1.CUSER1, '^\d+')), 0)
이 나에게 결과 I을 받고있다 필요. 저에게 올바른 해결책을 안내해 주신 Mr.Thorsten_Kettner에게 감사드립니다.
여기서 가장 의미가있는 것은 무엇입니까? – jarlh
죄송합니다. 나는 값들이 NULLs이고 10 진수가 아닌 (5), 2 진수 (0.33), 선행 제로 (.25)가없는 2 진수 등등에 대해 설명하려고 노력하고있다. – spyr0
AVG (NVL (V_PDAYPROD_CRW1.CUSER1,0))'시도해보십시오 - 충분해야합니다. – g00dy