2014-09-11 4 views
1

나의 요구 사항은 '2014-07-11T11 : 22 : 21.031 + 03 : 00'매개 변수로 다음 형식의 날짜를 전달하는 것입니다. 그런 다음 시간 소인이있는 날짜 형식으로 변환 한 다음 테이블에 삽입하십시오. 나는 시도하고 다음과 같은 오류를 받고있다 : - oracle 9i의 표준 시간대 형식의 매개 변수로 오는 문자열 변환

SQL> SELECT TO_DATE('2014-07-11 11:22:21.031','YYYY-MM-DD H24:MI:SS.FFF') FROM DUAL; 
SELECT TO_DATE('2014-07-11 11:22:21.031','YYYY-MM-DD H24:MI:SS.FFF') FROM DUAL 
             * 
ERROR at line 1: 
ORA-01821: date format not recognized 


SQL> 

SQL> SELECT TO_TIMESTAMP('2014-07-11 11:22:21.031','YYYY-MM-DD H24:MI:SS.FFF') FROM DUAL; 
SELECT TO_TIMESTAMP('2014-07-11 11:22:21.031','YYYY-MM-DD H24:MI:SS.FFF') FROM DUAL 
               * 
ERROR at line 1: 
ORA-01821: date format not recognized 


SQL> 

SQL> SELECT TO_CHAR('2014-07-11 11:22:21.031','YYYY-MM-DD H24:MI:SS.FFF') FROM DUAL; 
SELECT TO_CHAR('2014-07-11 11:22:21.031','YYYY-MM-DD H24:MI:SS.FFF') FROM DUAL 
       * 
ERROR at line 1: 
ORA-01722: invalid number 

어떤 매개 변수 날짜 형식 I이있는 경우 '2014_07_11T11 : 22 : 21.031_03 : 00'을?

+0

에서 필요한 형식을 설정하려면'H24' 될해야'HH24'는 마지막'SELECT' 때문에 당신의 문자열의 암시 날짜 변환 오류를 던지고있다. –

+0

두 개의 오류 'H24'와'FFF'가 있습니다. 'HH24'와'FF'이어야합니다. –

답변

1

H24가 마지막 SELECT 인해 당신의 문자열의 암시 날짜 변환 오류를 던지고 HH24 될해야 ... 사용해야하는 형식은 최종 쿼리가 될 것

YYYY-MM-DD HH24:MI:SSxFF 

입니다

SELECT TO_TIMESTAMP('2014-07-11 11:22:21.031','YYYY-MM-DD HH24:MI:SSxFF') FROM DUAL; 

또는 TO_TIMESTAMP_TZ 정확히 무엇을 찾으세요! 당신이 ANSI 날짜 또는 사전 정의 된 날짜가없이

SELECT TO_TIMESTAMP_TZ('2014-07-11 11:22:21.031 +03:00','YYYY-MM-DD HH24:MI:SSxFF TZH:TZM') FROM DUAL; 

마지막으로, 결코 오라클은 최초이자 유일한 후 TO_CHAR()이 수행 될 암시 날짜 변환을 적용하는 TO_CHAR()을 사용하지 않습니다. 따라서 마지막 쿼리 '2014-07-11 11 : 22 : 21.031'가 암시 적으로 세션의 NLS_DATE_FORMAT을 사용하여 Date로 변환하려고 시도되었으며 잘못된 숫자로 실패했습니다.

1

질문에 특히 대답 하시려면 에 'H24'와 'FFF'의 두 가지 실수가 있습니다. 나는 'HH24'와 'FF'로 변경 : 그것은 의 분수를 보유 할 수 없기 때문에 당신은 여기 to_date을 사용할 수 없습니다

  • : 당신의 세 번에 대해서는

    SQL> SELECT TO_TIMESTAMP('2014-07-11 11:22:21.031','YYYY-MM-DD HH24:MI:SS.FF') FROM DUAL; 
    
    TO_TIMESTAMP('2014-07-1111:22:21.031','YYYY-MM-DDHH24:MI:SS.FF') 
    --------------------------------------------------------------------------- 
    11-JUL-14 11.22.21.031000000 AM 
    

    .

  • 당신은 올바른 방향으로 가고있었습니다. 단지 위에서 언급 한 것처럼 두 가지 일을했습니다. 잘못되었습니다.
  • to_char? 왜? 적절한 형식 마스크를 사용하여 필수 형식의 날짜 또는 타임 스탬프를 표시하는 데 사용됩니다.

또 다른 예 : 세션 수준

SQL> ALTER SESSION SET nls_timestamp_tz_format = 'DD-MON-YYYY HH24:MI:SS.FF TZH:TZM'; 

Session altered. 

SQL> SELECT TO_TIMESTAMP('11-SEP-2014 17:01:30.034000','DD-MON-YYYY HH24:MI:SS.FF') FROM DUAL 
    2/

TO_TIMESTAMP('11-SEP-201417:01:30.034000','DD-MON-YYYYHH24:MI:SS.FF') 
--------------------------------------------------------------------------- 
11-SEP-14 05.01.30.034000000 PM 

SQL>