2011-01-20 3 views
0

나는 꽤 오랫동안 작동하지 않는 이유를 찾고있었습니다. 두 필드를 연결하고 날짜 비교를 시도했지만 ORA-01843 오류가 발생합니다. 올바른 달이 아닙니다. 내가 여기서 잘못하고있는 것이 확실하지 않습니다. 그것은 한 내가 마지막에 그와 문을 추가하지 않는 한 잘 실행Oracle SQL to_date 함수가 연결 문자열에서 작동하지 않습니다.

SELECT 
    sm.semester_date || cp.start_year AS effective 
FROM 
    database.table cp, 
    database.table2 sm 
WHERE cp.semesters_id = sm.semesters_id 
AND to_date(sm.semester_date || cp.start_year, 'MM/DD/YYYY') >= to_date('06/01/2011', 'MM/DD/YYYY') 

:

여기 내 코드입니다. 하지만 데이터 집합을 필터링해야합니다. 당신은 필터없이 실행하면

그것은 2010년 8월 15일 등

나는이를 게시 할 때 원래 마스크를 추가하는 것을 잊었다

, 내가 그 수정 한 반환합니다. 그러나 여전히 ORA-01840 : 입력 값이 날짜 형식으로는 충분하지 않은이 오류를 반환합니다.

수정 된 솔루션 찾기 : 첫째,이 점을 도와 주신 모든 분들께 감사드립니다. 둘째, 시작일이없는 코스로 인해 오류가 발생했습니다. 그렇게해서는 안되기 때문에 매우 실망 스럽습니다. 연결 항목에 해가 없었기 때문에 오류가 발생했습니다. 너희들이 내 코드를 고치는 걸 도왔 기 때문에 나는 이것을 발견했다. 고맙습니다.

+0

"sm.semester_date || cp.start_year"는 무엇을 반환합니까? 'MM/DD/YYYY'형식으로되어 있는지 확인 했습니까? – dimitrisli

답변

1

내 생각에 기본 날짜 형식이 TO_DATE에 전달할 문자열의 형식과 일치하지 않습니다. 연결된 문자열의 형식을 지정하려면 형식 문자열을 두 번째 매개 변수로 호출에 추가하십시오 (두 번째 호출에 대해 수행 한 것처럼). 날짜와 연도 사이에 분리 추가

3

보십시오 : 당신이 필터를 사용하지 않고 쿼리를 실행하면

SELECT 
    sm.semester_date || '/' || cp.start_year AS effective 
FROM 
    database.table cp, 
    database.table2 sm 
WHERE cp.semesters_id = sm.semesters_id 
AND to_date(sm.semester_date || '/' || cp.start_year) >= to_date('06/01/2011', 'MM/DD/YYYY') 

를, 그것은 무엇을 반환하지?

+0

28 초 구타! –

+0

@ 자 스틴 : 질의 먼저, 설명 나중에! – Quassnoi

+0

필터없이 실행하면 8/10/2008 등이 반환됩니다. – Micharch54

1

SEMESTER_DATE 열이 VARCHAR2입니까? 그렇다면 'MM/DD /'형식의 문자열입니까? 아니면 그냥 'MM/DD'입니까?

lweller가 지적했듯이 세션의 NLS_DATE_FORMAT이 'MM/DD/YYYY'가 아닌 경우 첫 번째 TO_DATE에 형식 마스크가 누락되었습니다. SEMESTER_DATE 가정

의 형식은 'MM/DD'에서 VARCHAR2를, 당신이

AND to_date(sm.semester_date || '/' || cp.start_year, 'MM/DD/YYYY') >= 
     to_date('06/01/2011', 'MM/DD/YYYY') 
0

첫 번째 TO_DATE()는 시스템의 기본 형식에 의존하려는 생각한다. 적절한 서식 문자열 (예 : 'MM/DD/YYYY')과 함께 두 번째 인수를 제공하십시오. 다음을 비교하십시오 :

SELECT SEMESTER_DATE || START_YEAR AS BARE_STRING, TO_DATE(SEMESTER_DATE || START_YEAR) AS CASTED_TO_DATE 
FROM (
    SELECT '12/31' AS SEMESTER_DATE, 2010 AS START_YEAR 
    FROM DUAL 
); 

SELECT SEMESTER_DATE || START_YEAR AS BARE_STRING, TO_DATE(SEMESTER_DATE || START_YEAR, 'MM/DD/YYYY') AS CASTED_TO_DATE 
FROM (
    SELECT '12/31' AS SEMESTER_DATE, 2010 AS START_YEAR 
    FROM DUAL 
); 
관련 문제