두 날짜 사이의 데이터 출력 0 7 3,178

by 김새롬 [2013.07.29 17:09:05]


제가 5월 1일의 데이터를 출력하고 싶다고 가정 할때요.

 
SELECT A.NAME, A.GENDER
 FROM TABLE A
 WHERE 
 A.DTM >= TO_DATE('20130501','YYYYMMDD')
 AND A.DTM <= TO_DATE('20130502','YYYYMMDD')

 이제껏 시작일을 5월1일, 끝나는 날짜를 5월2일로 해야 5월1일에 해당하는 데이터를 불러올수 있었습니다. 
 
SELECT A.NAME, A.GENDER
 FROM TABLE A
 WHERE 
 A.DTM >= TO_DATE('20130501','YYYYMMDD')
 AND A.DTM <= TO_DATE('20130501','YYYYMMDD')

허나 5월1일의 데이터를 얻기 위해, 위처럼 시작과, 끝나는 날짜를 '20130501'로 하면 데이터가 0으로 나오네요. 
어떻게 하면, 시작과 끝날짜를 '20130501' 로 해도 5월1일에 해당하는 데이터를 가져오죠? 
SYSDATE 와 관련이 있는건가요?


DTM의 데이터 타입은 DATE 입니다.
by 아린 [2013.07.29 17:21:44]
날짜형을 시간까지 지정해주시면 됩니다.

WHERE A.DTM >= TO_DATE('20130501','YYYYMMDD')
  AND A.DTM <= TO_DATE('20130501235959','YYYYMMDDHH24MISS')


by 김새롬 [2013.07.29 17:27:53]
아하! 말씀해주신 것을 쿼리에 적용해본다면
 SELECT A.NAME, A.GENDER
 FROM TABLE A
 WHERE 
 A.DTM >= TO_DATE (#startDt#,'YYYYMMDD')
 AND A.DTM <= TO_DATE (#endDt#,'YYYYMMDDHH24MISS')

이 되는건가요?

by 아린 [2013.07.29 17:29:44]
입력받는 변수의 값들도 아래처럼 들어와야죠.

#startDt# := 20130501
#endDt#   := 20130501235959

문제는 시간까지 지정을 하는건데요.

endDt 값을 5/1 일 23시 59분 59초 까지 한다는 거죠.

by 신이만든짝퉁 [2013.07.29 17:22:33]
a.dtm like to_date('20130501', 'YYYYMMDD')

또는

a.dtm between to_date('20130501', 'YYYYMMDD') and to_date('20130501235959', 'YYYYMMDDHH24MISS')

by 마농 [2013.07.29 17:44:57]
-- 뒷부분에 등호(=) 빼고 + 1 해서 비교.
WHERE A.DTM >= TO_DATE('20130501','YYYYMMDD')
  AND A.DTM <  TO_DATE('20130501','YYYYMMDD') + 1

by 손님 [2013.07.29 20:07:53]

WHERE A.DTM >= TO_DATE('20130501','YYYYMMDD')
  AND A.DTM <= TO_DATE('20130501','YYYYMMDD') + 0.99999

by 야신 [2013.07.31 00:34:44]

WHERE A.DTM BETWEEN TO_DATE('20130501','YYYYMMDD')
                AND 
TO_DATE('20130501','YYYYMMDD') + 0.99999

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