by 십이장기 [SQL Query] [2020.06.02 20:06:50]
쿼리를 짜니까 제 초보적인 실력으론
decode(substr(l데이터,1,1),'1','1월') ||
decode(substr(데이터,2,1),'1','2월') ||
decode(substr(데이터,3,1),'1','3월') ||
decode(substr(데이터,4,1),'1','4월') ||
decode(substr(데이터,5,1),'1','5월') ||
decode(substr(데이터,6,1),'1','6월') ||
decode(substr(데이터,7,1),'1','7월') ||
decode(substr(데이터,8,1),'1','8월') ||
decode(substr(데이터,9,1),'1','9월') ||
decode(substr데이터,10,1),'1','10월') ||
decode(substr(데이터,11,1),'1','11월') ||
decode(substr(데이터,12,1),'1','12월')
이렇게 각 자리를 decode로 연결해서 하는 방벙밖에 안떠오르더라구요 ㅠ 그리고 각자릿수마다 /로 연결하고싶은데
혹시 더 좋은 방법이 있을까요?
1건의 자료만 추출하여 변경하는 것인지?
여러건의 자료에 동시 적용되어야 하는 것인지?
WITH t AS ( SELECT 1 pk, '101000000001' v FROM dual UNION ALL SELECT 2, '111111111111' FROM dual ) SELECT pk , v , LISTAGG(DECODE(SUBSTR(v, lv, 1), '1', lv||'월'), '/') WITHIN GROUP(ORDER BY lv) x FROM t , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 12) GROUP BY pk, v ;
SELECT pk , v , SUBSTR( DECODE(SUBSTR(v, 1, 1), '1', '/1월') || DECODE(SUBSTR(v, 2, 1), '1', '/2월') || DECODE(SUBSTR(v, 3, 1), '1', '/3월') || DECODE(SUBSTR(v, 4, 1), '1', '/4월') || DECODE(SUBSTR(v, 5, 1), '1', '/5월') || DECODE(SUBSTR(v, 6, 1), '1', '/6월') || DECODE(SUBSTR(v, 7, 1), '1', '/7월') || DECODE(SUBSTR(v, 8, 1), '1', '/8월') || DECODE(SUBSTR(v, 9, 1), '1', '/9월') || DECODE(SUBSTR(v, 10, 1), '1', '/10월') || DECODE(SUBSTR(v, 11, 1), '1', '/11월') || DECODE(SUBSTR(v, 12, 1), '1', '/12월') , 2) x FROM t ;