SQL문제 질문입니다. 0 2 1,219

by cipp00h [SQL Query] [2017.10.02 18:57:39]


44444.PNG (29,528Bytes)

아래 문제를 제가 옆에 빨간 글씨로 설명 달면서 풀어봤는데 아무리 생각해봐도 결과값이 다 같은거 같아 질문드립니다.

결과값이 다른 것을 찾는 것인데 도대체 어느 부분이 잘못된건 가요...?

by 아발란체 [2017.10.02 19:35:39]

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

 


by cipp00h [2017.10.02 19:40:11]

상세한 설명 감사합니다^^ 즐겁고 풍요로운 명절되세요~

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