데이터가 콤마단위로 있을경우 특정 문자수치가 범위안에 포함하면 앞의 수를 갖고 와야 되는데 쿼리로 처리 가능한지요 0 1 185

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만 무수히 많아져서요 ㅠㅠ

예전에 무슨 책에 오라클 함수로 있었던거 같기도 하고 찾기 힘드네요

by 꼬랑지 [2019.08.13 16:49:27]
이게 원하시는 답인지 모르겠네요

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
;

 

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