너무나 간단한 문제 ㅜ_ㅜ; 0 5 2,071

by 임영민 [SQL Query] [2011.04.14 06:43:44]



SELECT * FROM ORDERS ;

결과는

order_num    order_date   cust_id

20005  2004-05-01  1000000001
20006   2004-01-12  1000000003
20007  2004-01-30  1000000004
20008   2004-02-03  1000000005
20009   2004-02-08 1000000001

책에 나온 예제 자체가 틀렸다고 나오네요. 문제가 많은 책인듯 ...

SELECT order_num FROM ORDERS WHERE TO_NUMBER (TO_CHAR (order_date, 'YY')) = 2004;

이렇게 하면 결과값이 없다고 나와요 ㅜ_ㅜ;;;
도와주세염...

by 마농 [2011.04.14 08:13:14]
SELECT TO_NUMBER (TO_CHAR (order_date, 'yy')) yy
, TO_NUMBER (TO_CHAR (order_date, 'yyyy')) yyyy
FROM orders
;

by camela [2011.04.14 09:01:23]
마농님 답변처럼 yy 와 yyyy 는 나오는 값이 다릅니다.
포맷을 yy 로 하셔서 년도의 뒤 2자리만 나오게 되므로 2004 를 찾지 못하는 것입니다.

by 허재영 [2011.04.14 09:42:38]
한가지 더하면 to_number은 굳이 안하셔도 되요
to_char() 하고 2004하고 비교해도 옵티마이져가 2004를 문자형식으로 바꿔서 비교해줘요

by 임영민 [2011.04.14 15:59:21]
결국 간단하게

SELECT order_num FROM ORDERS WHERE (TO_CHAR (order_date, 'yyyy')) = 2004;

이렇게 하면 되는군요 .. 답변 너무 감사합니다.

by 知音 [2011.04.18 12:21:04]
SELECT order_num FROM ORDERS WHERE order_date between to_date('20040101','yyyymmdd') and to_date('20041231','yyyymmdd');
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입