2014-06-20 2 views
1

을 ... 날짜오라클 SQL : AM과 PM과 as_of_date 기능은 여기 유선 문제의 종류가

내가 2011.01에서 2014.04로 매일 날짜의 열이, 내가 월말로 변환하려고 last_day 함수에 의한 날짜입니다. 여기 내 코드입니다 :

select distinct 
    last_day(dates) 
from db 

그리고 내 날짜 형식은 다음과 같습니다 : 나는 30-APR-201431-JAN-2011에서 모든 월말 날짜의 열을 기대하고 02-JAN-14 12.00.00.000000000 AM

. 두 개의 31-JAN-14 레코드가있는 것 외에는 모두 잘 작동합니다.

이 문제를 추적하면 원래 데이터에 06-JAN-14 12.00.00.000000000 AM06-JAN-14 12.00.00.000000000 PM이 있다는 것을 알았습니다. 이것이 문제의 원인임을 확인했으며 다른 모든 데이터는 AM 형식입니다.

왜 이런 일이 발생합니까? 어떻게 해결할 수 있습니까?

감사합니다. 왜

답변

2

"last_day"기능은 Oracle 날짜의 DAYS 부분을 해당 월의 마지막 날로 이동 시키지만 시간 부분은 만지지 않습니다. 이것

찾는 대신

select to_char(last_day(sysdate), 'HH24:MI') from dual; 

17:03 

가 수행 LAST_DAY 전에 날짜를 절단하려고 :

select distinct 
    last_day(trunc(dates)) 
from db 

그것을해야한다.

0

:

누군가가 시간 부분에 기록을 삽입

수정 :

..

당신은 (based on trunc(dates) <> dates)를 하나 개의 레코드를 삭제할 수 있습니다 ... 당신이 필요에 따라 달라집니다

UPDATE ... where trunc(dates) <> dates

으로 "시간 부분"을 제거 할 수 있습니다.

언제든지 해당 필드에 항상 0 시간이있는 CHECK 제약 조건을 추가 할 수 있습니다.