database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 41246 게시물 읽기
No. 41246
시분초만 계산하여 범위를 구하기
작성자
김용완(sonyon21)
작성일
2016-09-24 12:17
조회수
7,322

WORK_TIME Table에 값이 아래와 같을때

CODE FROM_TIME TO_TIME
1 08:30:00 20:29:59
2 20:30:00 08:29:59

예를 들어 00시40분40초의 값이 들어 왔을 경우

Code값을 어떻게 가져와야 할까요?

아니면 08시40분이 들어왔을 경우 Code값

시간비교를 하려고 하니 무조건 날짜까지 포함을 해서 검색을 해서

CODE값 2번의 범위에 값이 들어왔을 경우 에는 날짜까지 붙어서 검색이 되니 어떻게 해야 할지 감이 오질 않아서요.

부탁드립니다.

이 글에 대한 댓글이 총 4건 있습니다.

 위의 데이터에는 분명 날자의 변화가 생기는데 날자를 관리 하지 않으면 뽑아 낼수 없습니다

물론 시작 시간과 종료 시간은 절대 23시간 59분 59초 이상 차이나지 않는다는 전제가

있다면 아래와 같이 시작시간과 종료 시간을 구할 수는 있습니다

 

 

 

WITH T(CODE, S_TM, E_TM) AS (

    SELECT 1, '08:30:00', '20:29:59' FROM DUAL UNION ALL

    SELECT 2, '20:30:00', '08:29:59' FROM DUAL

)

SELECT CODE, TO_CHAR(S_TM, 'HH24:MI:SS') S_TM, TO_CHAR(E_TM, 'HH24:MI:SS') E_TM

FROM (

    SELECT

        CODE,

        TO_DATE(S_TM, 'HH24:MI:SS') S_TM,

        CASE WHEN TO_DATE(S_TM, 'HH24:MI:SS') - TO_DATE(E_TM, 'HH24:MI:SS') > 0 THEN TO_DATE(E_TM, 'HH24:MI:SS') + 1

            ELSE TO_DATE(E_TM, 'HH24:MI:SS')

        END E_TM

    FROM T

)

WHERE TO_DATE('08:40:00', 'HH24:MI:SS') BETWEEN S_TM AND E_TM

 

하지만 질문 하신데로 데이터는 날자의 변화가 생기는데 00:40:30 과 같은 데이터만 가지고는

결과를 정확하게 뽑아 낼수 없습니다

 

D 일 00:40:40 초인지 D+1 일 00:40:40 초인지 명확하게 해주어야 데이터 추출이 가능합니다

 

조회하고자 하는 00시40분40초는 어느 날자 기준인가요?

 

 

 

열공중님이 2016-09-25 11:27에 작성한 댓글입니다. Edit

테이블에 있는 값들에서 08:30:00을 빼면, CODE=1 은 오전(AM)에 해당하고 CODE=2 는 오후(PM)에 해당합니다.

 

들어온 날짜시간에서 8.5/24 를 빼서 그 결과가 AM/PM 중에 언제에 해당하는지를 찾으면 될것 같습니다.

 

hopper(bunny)님이 2016-09-25 23:15에 작성한 댓글입니다.

WITH work_time AS
(
SELECT 1 code, '08:30:00' from_time, '20:29:59' to_time FROM dual
UNION ALL SELECT 2, '20:30:00', '08:29:59' FROM dual
)
SELECT *
  FROM (SELECT '00:40:40' v_time FROM dual)
     , work_time
 WHERE (from_time <= to_time AND v_time BETWEEN from_time  AND to_time   )
    OR (from_time >  to_time AND v_time BETWEEN from_time  AND '23:59:59')
    OR (from_time >  to_time AND v_time BETWEEN '00:00:00' AND to_time   )
;

 

마농(manon94)님이 2016-09-26 16:03에 작성한 댓글입니다.
이 댓글은 2016-09-26 16:05에 마지막으로 수정되었습니다.

부족한 저의 지식에 이렇게 열의를 가져주진점 너무 감사합니다.

여러분들의 도움으로 많은 부분이 해결되어 정말 감사합니다.

김용완(sonyon21)님이 2016-10-12 15:34에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
41250누적 차 [1]
김학빈
2016-09-26
6791
41249날짜쿼리 질문요 [3]
울산
2016-09-26
7045
41247DBA입문자 입니다 ㅠㅜ 제발 도와주세요
DBA초보자
2016-09-24
7222
41246시분초만 계산하여 범위를 구하기 [4]
김용완
2016-09-24
7322
4124409:00 ~ 15:30 형식으로 사이 시간을 구하는 방법 [3]
김씨
2016-09-22
6886
41243Oracle 12c Enterprise 버전 윈도우 32bit 문의 [1]
박종혁
2016-09-21
7435
41242TABLE 변동사항 비교하여 표기 질문드립니다. [1]
기쁨이
2016-09-19
6838
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다