2017-12-13 6 views
0

날짜를 얻기 위해 쿼리를 실행했을 때이 형식으로 검색됩니다. '로 변환해야하지만이 값을 mm/dd/yyyy . 나는 변환이 쿼리를 사용하고오라클에서 yyyy/mm/dd hh : mm : ss.SSS를 mm/dd/yyyy로 잘리는 방법

select 
    to_char(
     add_months (
      to_date(
       to_char(
        trunc(
         TO_DATE('2016/01/01 00:00:00.0', 'YYYY/MM/DD HH24:MI:SS.SSS') 
        ), 'MM/DD/YYYY' -- to char 
      ),'MM/DD/YYYY' -- to date 
     ), -2*1 -- add months 
    ), 'MM/DD/YYYY' -- to char 
) START_DATE, 

to_char(
    add_months (
     to_date(
      to_char(
       trunc(
        TO_DATE('2017/01/01 00:00:00.0', 'YYYY/MM/DD HH24:MI:SS.SSS') 
       ), 'MM/DD/YYYY' -- to char 
      ), 'MM/DD/YYYY' -- to date 
     ), 3 -- add months 
    ), 'MM/DD/YYYY' -- to char 
) END_DATE 

from dual; 

출력

ORA-01810: format code appears twice 
01810. 00000 - "format code appears twice" 
+0

이유 : TO_CHAR (ADD_MONTHS (TO_DATE (TO_CHAR (TRUNC (TO_DATE ("문자열")))))) - 사용'TO_CHAR (TRUNC (ADD_MONTHS (TO_DATE ("문자열"))))' –

+0

여기서 문제는 SS를 여러 번 사용하고 있다는 것입니다. YYYY/MM/DD HH24 대신 MI : SS.SSS 사용 YYYY/MM/DD HH24 : MI : SS –

답변

1

ORA-01810은 다음과 같습니다 형식의 코드는 두 번 때문에 SS.SSS의의

나타납니다. SSS은 올바른 날짜 형식이 아닙니다. 당신은 소수점 이하의 초를 처리하기 위해 노력하고 있지만됩니다

  1. 그에 대한 올바른 형식 마스크는 FF
  2. DATE는 소수점 이하의 초를 지원하지 않는 것입니다 만 TIMESTAMP

정말 날짜 형식 인 디스플레이 문제와 클라이언트의 NLS 설정에 의해 처리되어야합니다. 당신이 정말로 SQL에서 작업을 수행해야하지만이 모두가 당신이 필요로하는 것입니다 : 날짜 리터럴이 이미 자정으로 설정되어 있기 때문에 당신은 trunc() 필요하지 않습니다

select 
    to_char(DATE '2015-11-01', 'MM/DD/YYYY') START_DATE 
    , to_char(DATE '2017-04-01', 'MM/DD/YYYY') END_DATE 
from dual; 

. add_months()은 날짜 리터럴의 값만 변경할 수 있으므로 필요하지 않습니다. 날짜를 문자열로 캐스트하지 않아도되기 때문에 날짜를 날짜로 다시 캐스팅 할 필요가 없습니다.

1

문제는 to_date 자체의 변환에 있습니다. 자체가 오류를 던지고 아래 변환 당신은

당신은 당신이 단순히보다는 당신의 필요를 만족시킬 것이다

select TO_TIMESTAMP('2017/01/01 00:00:00.0', 'YYYY/MM/DD HH24:MI:SS.FF') from dual 

이 타임 스탬프를 위해 타임 스탬프 문자열을 변환 할 경우 아래처럼 사용할 필요가

select 
TO_DATE('2017/01/01 00:00:00.0', 'YYYY/MM/DD HH24:MI:SS.SSS') END_DATE 
from dual; 

언급 너무 많은 전환을합니다.

select to_char(
    add_months(
    TO_TIMESTAMP('2017/01/01 00:00:00.0', 'YYYY/MM/DDHH24:MI:SS.FF'), 
    -2), 
'mm/dd/yyyy') from dual 
+0

감사합니다. 그것은 효과가 있었다. –