2016-09-22 2 views
1

질문은 : 2 호선에서다음 쿼리를 수행하는 방법은 무엇입니까?

SELECT cname 
FROM client_master c, sales_orders s 
WHERE c.clientno=s.clientno 
AND s.orderdate < to_char(orderDate,'mm') ='AUG'; 

ERROR : ORA-00933 : SQL 명령이 제대로 종료되지 내가 시도 '8월'

의 달 전에 주문한 고객의 이름을 나열 아무도 위의 쿼리에 무엇이 잘못되었는지 말해 줄 수 있습니까?

+1

'및 s.orderdate

답변

1

먼저 쉼표로 테이블을 나열하는 대신 JOIN을 사용하는 것이 좋습니다. 그런 다음 마지막 날짜를 조정하여 8 월 1 일 이전의 주문 날짜를 지정해야합니다. 다음과 같이하면됩니다.

SELECT cname 
FROM client_master c 
INNER JOIN sales_orders s 
ON c.clientno = s.clientno 
WHERE s.orderdate < to_date('2016-08-01', 'YYYY-MM-DD') 
+0

여전히 날짜와 문자열을 비교 중이므로 암시 적 변환과 세션 NLS 설정에 의존합니다. 아마도 ANSI 날짜 리터럴을 사용 했습니까? –

+0

문자열인지 어떻게 알 수 있습니까? 나는 OP에서 어떤 주문 날짜가 보일지 실제로 확인해야한다고 생각합니다. 나는 – kbball

+1

을 요청할 것입니다. 여러분은 아마도 날짜 인 컬럼을 문자열 리터럴 인''2016-08-01 '과 비교하고 있습니다. 날짜를 원한다면 날짜 리터럴, 날짜 '2016-08-01'또는 명시 적 변환 'to_date ('2016-08-01 ','YYYY-MM-DD ')'가 필요합니다. (NLS_DATE_FORMAT이 (가) YYYY-MM-DD 인 경우 * 작업 할 수 있지만, 안전하게 가정 할 수는 없습니다.) –

관련 문제