오라클 날짜 구하기 질문드려요 0 3 840

by 하나둘셋 [Oracle 기초] [2017.06.08 11:36:46]


apc_dt는 날짜 타입이고요

데이터는 2016/01/01 14:34:34 이런식으로 들어있어요

제가 뽑고싶은건  

:str_ym 에 201612

:end_ym에 201701

이렇게 넣었을경우 20161201~ 20170131의 데이터를 가지고 오고싶은데요 

select * from table 
where apc_dt between to_date(:str_ym, 'yyyymm') and last_day(to_date(:end_ym, 'yyyymm'))

이렇게 했을경우 count가 안맞아서요..

201612 201612를 넣었을경우 카운트가 28144가 나오고 

201701 201701를 넣었을 경우는 19491 

201612 201701를 넣었을 경우는 47643이 나와요

왜  카운트가 다른지 모르겠어요...ㅜㅜ

다른 방법이 있을까요? 

by 랑에1 [2017.06.08 11:50:15]
select * from table
where apc_dt between TRUNC(to_date(:str_ym || '01', 'yyyymmdd')) and TRUNC(last_day(to_date(:end_ym || '01', 'yyyymmdd'))) + 0.99999

이렇게 한번 해보세요

 


by 하나둘셋 [2017.06.08 12:19:22]

감사합니다!!


by 마농 [2017.06.08 13:14:06]

일자 조건만 주었기 때문에 마지막 일자의 0 시 정각 자료만 포함됩니다.
마지막 일자의 0시0분1초 부터 23시59분59초 까지의 자료가 누락됩니다.
 

SELECT *
  FROM table
 WHERE apc_dt >= TO_DATE(:str_ym, 'yyyymm')
   AND apc_dt <  ADD_MONTHS(TO_DATE(:end_ym, 'yyyymm'), 1)
;
SELECT *
  FROM table
 WHERE apc_dt >= TO_DATE(:str_ym, 'yyyymm')
   AND apc_dt <= LAST_DAY(TO_DATE(:end_ym, 'yyyymm')) + 0.99999
;

 

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