2009-05-08 4 views
0

말 I 문제 :오라클 - 이미 존재하는 날짜로 날짜를 만드는 방법은 무엇입니까?

select date_field from table1; 

DATE_FIELD는 '25처럼 .11.2009 ' 나는 달과 반대와 날짜 필드의 위치를 ​​변경하려고합니다. (일 코스> 12 개 일부 조작의)

TO_DATE(MOD(SUBSTR(TO_CHAR(a.A_DATE, 'DD.MM.YYYY'), 4, 2), 12) || '.' || 
       SUBSTR(TO_CHAR(a.A_DATE, 'DD.MM.YYYY'), 1, 2) || 
       SUBSTR(TO_CHAR(a.A_DATE, 'DD.MM.YYYY'), 6, 4), 
      'DD.MM.YYYY') 

것은 MOD에서 반환 된 값() 함수는 2009년 7월 1일에 대한 즉, 숫자라는 것이다 -> 나는 '01은, 날짜를 1되지 얻을 '예상대로. 나중에 나는 데이트 할 수 없다. 내 문제의 바로 가기 솔루션이 있습니까?

답변

0

yli> "필자는 어떻게 든 테스트 환경에서 사용하기 위해 실제로 날짜를 익명으로 처리하고 있습니다."

여기 실제 요구 사항이 있습니다. 일부 날짜를 변경하려면 날짜/문자열 변환 함수 (TO_CHAR/TO_DATE)를 사용할 필요가 없습니다. Oracle은 날짜 값에 직접 산술 연산을 지원합니다.

당신이 단지 같은 것을 사용하지 왜 날짜를 랜덤하려면

:

select date_field + dbms_random.value * 100 from table1; 
0

이 방법이 유용합니까?

TO_DATE(TO_CHAR(a.A_DATE, 'DD/MM/YYYY'), 'MM/DD/YYYY') 
+0

나 "ORA-01843 유효한 월"오류를 제공합니다. – yli

+2

물론 1 일과 31 일 사이에 달이 있기 때문에 달은 1에서 12 사이 여야 만하기 때문에 물론 그렇습니다. 어떤 질문을 던지십시오 - 달성하려는 것은 무엇입니까? –

+0

필자는 어떻게 든 테스트 환경에서 사용될 날짜를 실제로 익명으로 처리하고 있습니다. – yli

1

제가 사용 : CASE MOD (SUBSTR (TO_CHAR (a.birthday를 'DD.MM.YYYY'), 1, 2), 12) WHEN 1 THEN 01 WHEN 2 THEN ' 02 ' 언제 3 THEN'03 ' 언제 4 THEN'04 ' 언제 5 THEN'05 ' 언제 6 THEN'06 ' 언제 7 THEN'07 ' WHEN 8 THEN'08 ' 9 THEN '09 ' 언제 10'10 ' 언제 11'11 ' 언제 12'12 ' 끝 매우 우아하지는 않지만 작동합니다 :)

+1

LPAD (TO_CHAR (a.birthday, 'DD'), 2, '0') –

+0

죄송합니다. LPAD (MOD (TO_CHAR (a.birthday, 'DD', 2, '0'), 12)) –

+0

사실, MOD 식의 출력은 1에서 12 사이가 아닌 0에서 11 사이의 값이므로 모든 가능한 입력에 대해 작동하지 않습니다. –

0

TO_CHAR(<date>, '<format>')을 사용해 보셨습니까?

4

나는 당신이하려는 것을 심각하게 재검토해야한다고 생각합니다.

당신이 시작한 것은 단순히 날짜의 형식을 변경하려는 것입니다. '25 .11.2009 '를 '11 .25.2009'로 변경하십시오.

date_field가 실제로 DATE 유형 인 경우 필드에 고유 한 형식이 저장되어 있지 않습니다. 특정 날짜와 시간을 나타내는 숫자 값입니다. SQLPlus 나 다른 도구에서 SELECT를 선택하면 텍스트로 형식화되지만 해당 형식은 테이블에 저장되지 않습니다.

특정 형식으로 날짜를 보려면 TO_CHAR 함수를 사용하여 강제로 지정하십시오. NLS_DATE_FORMAT을 사용하여 단일 세션, 단일 클라이언트 또는 전체 데이터베이스에 대한 기본 형식 모델을 설정할 수도 있습니다.

관련 문제