오라클 where 절에서 현재년도와 비교하기 질문 0 5 2,825

by ksbgenius [2015.12.03 09:38:47]


test라는 테이블이 있습니다.

여기에는 name, year, birth 등 여러가지가 있습니다.

기존에는 그냥 정보를 가져올떄

select * from test where name='홍길동';

이었는데

여기서 최근 3년의 데이터만 추출하고 싶습니다.

YEAR 칼럼에는 년도로 2015, 2014, 2013... 년도가 들어가 있습니다.

Year칼럼은 char(4)입니다.

지금이 15년 이니깐, 13년 이상의 자료를 뽑고 싶습니다.

 

select * from test where name='홍길동' and YEAR > (select EXTRACT(YEAR FROM SYSDATE)-2 from daul);

이런식으로 하면 안되는 건가해서요..

by 창조의날개 [2015.12.03 09:44:52]

select * 
from test 
where name='홍길동'
  AND YEAR >= TO_CHAR(ADD_MONTHS(SYSDATE,-24),'YYYY')
;

 


by 마농 [2015.12.03 10:24:09]

질문에 올리신 쿼리의 daul 이 오타네요. dual 로 바꾸면 돌아가긴 할것입니다.

그러나 (Select From dual) 은 필요 없는 부분이라 사용하신 표현식만 적용하면 되구요.

사용하신 표현식의 결과는 숫자입니다.

컬럼이 문자이므로 문자로 변환하는 과정이 추가로 필요합니다.


by 우리집아찌 [2015.12.03 10:25:20]
WITH TEST AS (
SELECT '2015' YEAR , '홍길동' NAME FROM DUAL UNION ALL
SELECT '2015' YEAR , '홍길동2' NAME  FROM DUAL UNION ALL
SELECT '2015' YEAR , '홍길동1' NAME  FROM DUAL UNION ALL
SELECT '2014' YEAR , '홍길동' NAME  FROM DUAL UNION ALL
SELECT '2013' YEAR , '홍길동' NAME  FROM DUAL UNION ALL
SELECT '2012' YEAR , '홍길동' NAME  FROM DUAL UNION ALL
SELECT '2011' YEAR , '홍길동' NAME  FROM DUAL 
)
SELECT * 
  FROM TEST 
 WHERE NAME = '홍길동'
   AND YEAR >= TO_CHAR(SYSDATE,'YYYY') - 2 

 


by 마농 [2015.12.03 10:36:34]

계산 결과가 숫자인 것은 좋지 않습니다.

문자를 숫자와 비교하면 내부적으로는 문자를 숫자로 바꾸어 비교하게 됩니다.

이 경우 문자컬럼에 함수가 적용되는 형태가 됩니다.

불필요하게 컬럼에 가공이 들어가게 되는 거죠.

계산 결과를 문자로 바꾸어 주는게 좋습니다.


by 우리집아찌 [2015.12.03 12:26:53]

친절한 답변 감사합니다..

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입