by 권오창 [SQL Query] [2019.08.13 15:13:22]
데이터가 콤마(,) 단위로 있습니다. 일단 시간대의 값입니다.
07,15,00 ....
현재 SYSDATE의 값이 2019-08-13 08시 30분 20초라고 하면 가져오는 시간은 08시입니다.
08시가 저 콤마(,) 단위의 시간대에서 앞의 시간을 가져와야 됩니다.
08시는 15시가 넘어간건 아니니 07시를 가져와야 되구요 17시라면 15시가 되겠네요 23시50분도 15시
자정이 넘어가면 00시로 되어야 됩니다. 새벽 02시면 00을 가져와야되구요
저 콤마로 시간범위는 늘어날 수 있습니다.
제가 하니 CASE WHEN만 무수히 많아져서요 ㅠㅠ
예전에 무슨 책에 오라클 함수로 있었던거 같기도 하고 찾기 힘드네요
이게 원하시는 답인지 모르겠네요 WITH A AS ( SELECT '07,10,15,18,22,00,03,05' COLA FROM DUAL ),B AS( SELECT TO_CHAR(TO_DATE('20190813004321','YYYYMMDDHH24MISS'),'HH24') CUR_TIME FROM DUAL ) SELECT COLA ,LV ,REGEXP_SUBSTR(COLA,'[^,]+',1,LV) SPLIT_TIME ,CUR_TIME ,MAX(REGEXP_SUBSTR(COLA,'[^,]+',1,LV)) OVER() PREV_TIME FROM A,B ,(SELECT LEVEL LV FROM DUAL,A CONNECT BY LEVEL<=REGEXP_COUNT(COLA,',')+1) WHERE 1=1 AND REGEXP_SUBSTR(COLA,'[^,]+',1,LV)<=CUR_TIME ;