2017-12-14 21 views
0

값을 일반 날짜 형식으로 변환하려고합니다. 그러나 ORA-01841 오류가 나타납니다. (전체) 연도는 -4713에서 +9999 사이 여야하며 0이 아니어야합니다. 나는이 웹 사이트에서 유사한 질문에 대한 답을 조사했으나 문제를 해결하지 못했습니다.정규 표현식 출력 데이터에서의 날짜 변환 - ORA-01841 : (전체) 연도는 -4713에서 +9999 사이 여야하며 0이 아님

-- How the data looks like 
select REPLACE(REGEXP_SUBSTR(data_detail, '([^|]*)([$|]|$)', 1, 5), '|', '') from land.LAND_DATA; 

출력

2017-11-16T04 : 45 : 05.000Z

2017-11-16T04 : 46 : 04.000Z 내가 위에서 언급 한 출력을 변환하려고

적절한 날짜 형식으로 오류가 나타납니다. 내가 여기

select 
TO_DATE(
TO_CHAR(
TO_TIMESTAMP(
    REPLACE(REGEXP_SUBSTR(data_detail, '([^|]*)([$|]|$)', 1, 5), '|', ''), 
'YYYY-MM-DD"T"HH24:MI:SS.ff3"Z"'),'MM/DD/YYYY HH24:MI:SS'), 
     'MM/DD/YYYY HH24:MI:SS') 
from land.LAND_DATA; 

답변

0

무슨 실수를하고있는 중이 야 이러한 결과는 TO_TIMESTAMP function의 입력 데이터입니다 년이 먼저

2017-11-16T04:45:05.000Z 
2017-11-16T04:46:04.000Z 

, 다음 달과 날과 시간에 밀리 초를 가지고있는 다음과 끝 (쉼표 뒤에).


는 코드에서 조각입니다 :

TO_TIMESTAMP(....... , 'MM/DD/YYYY HH24:MI:SS') 

두 번째 매개 변수는, a date format model입니다이 편지 (순서대로) 다음과 같은 의미가 있습니다

  • MM - 월 (01 -12, January = 01).
  • / - 달의 날 (1-31)
  • / - -
  • DD 분리기 분리기
  • YYYY - 4 자리 년; S는 BC 날짜 앞에 마이너스 기호를 붙입니다.
  • - 분리 자 (공백)
  • HH24 - 시간 (0-23).
  • : - 분리 자
  • MI - 분 (0-59).
  • : - 구분 기호
  • SS - 초 (0-59). 한 달이 형식으로 먼저,하지만 데이터가 올해 시작하기 때문에

위의 형식 모델 는, 입력 데이터의 형식과 일치하지 않습니다!

사용하여 다음과 같은 형식 대신 :

'yyyy-mm-dd"T"hh24:mi:ss.ff"Z"' 

형식이 좋은 경우, 또는이 같은 간단한 쿼리를 사용하여 오류를 제공 여부를 테스트 할 수 있습니다

:

select 
    to_timestamp('2017-11-16T04:45:05.000Z', 'yyyy-mm-dd"T"hh24:mi:ss.ff"Z"') 
from dual; 

TO_TIMESTAMP('2017-11-16T04:4 
----------------------------- 
2017/11/16 04:45:05.000000000