Oracle의 분기에 따라 날짜 범위를 어떻게 추출하고 표시 할 수 있습니까?

StackOverflow https://stackoverflow.com//questions/9685244

문제

저장 프로 시저의 일부로 요약 테이블을 구축하고 있습니다. 두 개의 열이 있습니다.첫 번째 열은 시작을 표시해야하며 두 번째 열은 분기를 지정하는 숫자 인 입력 매개 변수를 기반으로하는 날짜 범위의 끝을 표시해야합니다.나는 asktom에서 다음을 추출 할 수 있었지만 몇 가지 질문이 있습니다.

Open C1 FOR
SELECT  ( SELECT TRUNC (SYSDATE, 'Q')-1+1 AS 'StartOf' FROM DUAL ),
SELECT  ( SELECT TRUNC(ADD_MONTHS (SYSDATE, +3), 'Q')-2 AS 'EndOf' FROM DUAL )
FROM DUAL; 
.

질문 1. 여기에있는 수학은 leapyears를 설명합니다 ... 나는 그것이 생각하지 않지만 그것을 처리하는 방법을 모르겠습니다.

질문 2. 입력 매개 변수를 어떻게 추가합니까? 특정 분기로 'unkarreter'를 추가합니까?나는 그것을 sysdate 대신에 넣으려고 노력했지만 처음에 그것을 다시 포맷해야합니까?

어떤 응답에 미리 감사드립니다.

도움이 되었습니까?

해결책

Tom Kyte는 당신에게 대답을 가지고 있습니다. http : // asktom..oracle.com / pls / asktom / f? p= 100 : 11 : 0 :::: p11_question_id : 250288900346075009

Open C1 FOR 
select add_months( dt, (inQuarter-1)*3 ),
       last_day(add_months( dt, (inQuarter-1)*3+2 ) )
from (
  select to_date( inYear || '0101', 'yyyymmdd' ) dt
  from dual)
.

다른 팁

숫자 연도와 숫자 분기 매개 변수를 DATE

로 변환 할 수 있습니다.
SELECT add_months( trunc( to_date( to_char( <<numeric year>> ),
                                   'YYYY' ),
                          'YYYY' ),
                   3 * <<numeric quarter>> ) first_of_quarter,
       add_months( trunc( to_date( to_char( <<numeric year>> ),
                                   'YYYY' ),
                          'YYYY' ),
                   4 * <<numeric quarter>> ) - 1 last_of_quarter,
  FROM dual
.

두 날짜의 시간 구성 요소는 4 분기의 마지막 날에 자정이 될 것입니다 (즉, 다음 분기 초반 24 시간 전).분기에 가능한 모든 날짜를 포함 할 수있는 범위를 원하면 4 분기의 마지막 날에 23:59:59의 마지막 분기가 23:59:59를 원할 수 있습니다.

제안 :

Open C1 FOR
SELECT TRUNC (d_inQuarter, 'Q') AS "StartOf",
       TRUNC(ADD_MONTHS (d_inQuarter, +3), 'Q') AS "EndOf"
FROM (SELECT add_months(to_date(to_char(i_yr)||'-01-01','YYYY-MM-DD'), (i_q-1)*3)
      AS d_inQuarter FROM DUAL); 
.

- 정수 매개 변수 I_YR 및 I_Q는 각각 연도와 분기를 대표합니다.

ENDOF는 다음 분기 첫날에 자정을 나타내므로 < "EndOf"가 아닌 <= "EndOf" 조건을 기반으로해야합니다.(이것은 분기 마지막 날에 모든 시간이 포함되어야합니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top