기간내 기간검색

현재 하는 프로젝트에서 기간 검색을 하는데, 입원 기록을 조회 할 때, 입원일자로 SELECT 를 해서 데이터를 전달 해주었다. 그런데 입원 처럼 기간이 있는 경우 기간검색은 단순히 기간 시작일을 SELECT하면 결과가 이상하다.

예를 들면 2018년 6월 01 일 에 입원한 환자가 아직 재원 중일때

현재 날짜가 2018년 07월 25일이고 이 환자가 1개월로 이력을 조회하면 (2018-06-26~2018-07-25) 진료이력이 나오지 않는다 왜냐하면 입원일자가 조회 시작/종료일에 포함 되지 않기 때문이다. 이는 사용자가 원하는 결과가 아닐것이다.

그래서 DB에 TEST 테이블을 만들어서 테스트를 해보았다. 예를 바꿔서 2018년 6월 1일에 입원해서 7월 25일에 퇴원한 환자 A가 있고, 2018년 6월 3일에 입웒개서 아직 재원중인 환자 B가 있다.

| STARTDT  |  ENDDT  |
| 20180601 | 20180725|
| 20180603 |         |

2018년 7월 1일에서 7월 10월 중에 재원중인 환자를 검색하면 둘다 나와야 한다.

SELECT * FROM TEST WHERE date(startdt) <= date('20180701') and date(enddt) >= date('20180710')

이렇게 하면 아직 재원중인 환자 B는 안 나온다 .

SELECT * FROM TEST WHERE date(startdt) <= DATE('20180701') and date(ifnull(enddt, now())) >= DATE('20180710')

이렇게 하면 두환자 모두 잘나온다.