일자조회 방법 퀴즈 0 5 1,444

by 야신 [Oracle 기초] DATE 형변환 [2019.04.04 15:20:22]


SELECT t.*
FROM (
       SELECT '1-01' AS dt FROM dual UNION ALL
       SELECT '6-05' AS dt FROM dual UNION ALL
       SELECT '12-19' AS dt FROM dual
     ) t
WHERE dt =  ?

 

위와 같이 데이타는 '월-년' 의 형태로 구성되어 있고

조건데이타 입력은 '2016-05' 의 형태로 입력됩니다.

substr 을 사용하지 않고 가능한 변형 방법은?

by AUOPEN [2019.04.04 16:33:20]

SELECT t.*
 FROM (
        SELECT '1-01' AS dt FROM dual UNION ALL
        SELECT '6-05' AS dt FROM dual UNION ALL
        SELECT '12-19' AS dt FROM dual
      ) t
 WHERE dt =  TO_CHAR(TO_DATE('2016-05','YYYY-MM'),'FMMM-YY')
;


by 야신 [2019.04.04 19:32:59]

NO Data Found 입니다.. ^^. 아래와 같이 조회해 보시면 2005년 6월은 '6-5' 로 표현됩니다.
SELECT TO_CHAR(TO_DATE('2005-06','YYYY-MM'),'FMMM-YY') FROM dual


by 마농 [2019.04.04 16:38:21]
SELECT ym
     , LTRIM(TO_CHAR(TO_DATE(ym, 'yyyy-mm'), 'mm-yy'), '0') x1  --> 날짜 변환 함수 이용
     , REGEXP_REPLACE(ym, '..(..)-0?(.+)', '\2-\1') x2          --> 정규식 함수 이용
  FROM (SELECT '2006-05' ym FROM dual)
;

 


by 야신 [2019.04.04 19:44:21]

아! LTRIM 을 이용하여 제거하는 방법도 있었네요. 깜빡하고 있었네요.

제가 찾아낸 방법은 아래와 같네요. FM 을 두번 사용하게 되면 두번째는 기능을 원복하게 됩니다.

FM마스크를 이용하여 이러지러 사용해 보다가 알았는데 원리는 모르겠어요.

TO_CHAR(TO_DATE('2005-06','YYYY-MM'),'FMMM-FMYY')

 

아래 예제를 더 참고해 보세요. FM 에 여러번 사용하는 것에 대한 설명은 못 찾았네요. ㅡ_ㅡ;;

SELECT ym
      , to_char(TO_DATE(ym, 'yyyy-mm-dd'),'DD-MM-YY')       AS no_fm_str
      , to_char(TO_DATE(ym, 'yyyy-mm-dd'),'FMDD-MM-YY')     AS fm1_str
      , to_char(TO_DATE(ym, 'yyyy-mm-dd'),'FMDD-FMMM-YY')   AS fm2_str
      , to_char(TO_DATE(ym, 'yyyy-mm-dd'),'FMDD-FMMM-FMYY') AS fm3_str
  FROM (SELECT '2005-06-01' ym FROM dual)

 

YM NO_FM_STR FM1_STR FM2_STR FM3_STR
2005-06-01 01-06-05 1-6-5 1-06-05 1-06-5

 


by 마농 [2019.04.05 08:03:20]

새로운 걸 알았네요.
FM 사용은 알고 있었는데.
여러번 사용할 때의 효과는 새로 알게 되었네요.

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