TO_DATE로 형 변환 할 때 YYYYMM 이하 명시하지 않았을 때 이하 값이 어떻게 변환되는지 이해 정도를 보는 문제 풀이로 보입니다.
4번 경우
201501 값을 YYYYMM으로 하면, 이하 시분초 값은 000000 으로 됩니다.
즉 201501000000 = SYS_END_DATE 만 검색이 되어 조회 값이 달라지게 됩니다.
이하 검증
WITH T AS ( SELECT TO_DATE('20161231 00:00:00', 'YYYYMMDD HH24:MI:SS') AS svc_end_date FROM DUAL UNION ALL SELECT TO_DATE('20161231 23:59:59', 'YYYYMMDD HH24:MI:SS') AS dt FROM DUAL UNION ALL SELECT TO_DATE('20170112 12:20:59', 'YYYYMMDD HH24:MI:SS') AS dt FROM DUAL UNION ALL SELECT TO_DATE('20170101 00:00:00', 'YYYYMMDD HH24:MI:SS') AS dt FROM DUAL UNION ALL SELECT TO_DATE('20170101 23:59:59', 'YYYYMMDD HH24:MI:SS') AS dt FROM DUAL UNION ALL SELECT TO_DATE('20170112 12:20:59', 'YYYYMMDD HH24:MI:SS') AS dt FROM DUAL UNION ALL SELECT TO_DATE('20170131 00:00:00', 'YYYYMMDD HH24:MI:SS') AS dt FROM DUAL UNION ALL SELECT TO_DATE('20170131 23:59:59', 'YYYYMMDD HH24:MI:SS') AS dt FROM DUAL UNION ALL SELECT TO_DATE('20170201 00:00:00', 'YYYYMMDD HH24:MI:SS') AS dt FROM DUAL UNION ALL SELECT TO_DATE('20170201 23:59:59', 'YYYYMMDD HH24:MI:SS') AS dt FROM DUAL ) SELECT TO_CHAR(svc_end_date, 'YYYY-MM-DD HH24:MI:SS') FROM T WHERE --svc_end_date >= TO_DATE('20170101000000', 'YYYYMMDDHH24MISS') AND svc_end_date <= TO_DATE('20170131235959', 'YYYYMMDDHH24MISS') --svc_end_date >= TO_DATE('20170101', 'YYYYMMDD') AND svc_end_date < TO_DATE('20170201', 'YYYYMMDD') --'201701' = TO_CHAR(svc_end_date, 'YYYYMM') TO_DATE('201701', 'YYYYMM') = svc_end_date