programing

년수를 얻기 위한 Oracle 날짜 차이

lastmemo 2023. 3. 12. 10:22
반응형

년수를 얻기 위한 Oracle 날짜 차이

날짜 사이의 연수를 계산하는 방법이 있나요?비약인지 아닌지를 고려하면서 어떻게 해야 할지 모르겠다.혹시 SELECT에서 IF 스테이트먼트를 할 수 있을까요?

감사해요.

나는 사용하고 싶다months_between, 와 조합할 수 있습니다.floor:

select floor(months_between(date '2012-10-10', date '2011-10-10') /12) from dual;

select floor(months_between(date '2012-10-9' , date '2011-10-10') /12) from dual;

floor우울한 세월을 보낼 수 있게 해주죠부분적인 부품을 원하신다면 사용하지 않으셔도 됩니다.floor.

연차만 원한다면 다음과 같은 이점이 있습니다.

SELECT EXTRACT(YEAR FROM date1) - EXTRACT(YEAR FROM date2) FROM mytable

아니면 소수년도 원하십니까?

SELECT (date1 - date2) / 365.242199 FROM mytable

구글에 따르면 365.242199는 1년 후입니다.

저는 sybasediff와 유사하게 동작하는 year diff 함수를 구현해야 했습니다.이 경우 반올림된 날짜 차이가 아니라 실제 연도 차이가 계산됩니다.따라서 2개의 날짜가 1개로 구분되어 있는 경우 연도의 차이는 1이 될 수 있습니다( 참조).select datediff(year, '20141231', '20150101')).

연도 차이를 이렇게 계산해야 하는 경우 다음을 사용합니다.

EXTRACT(YEAR FROM date_to) - EXTRACT(YEAR FROM date_from)

로그의 경우 (거의) 완전한 날짜 지정 함수:

CREATE OR REPLACE FUNCTION datediff (datepart IN VARCHAR2, date_from IN DATE, date_to IN DATE)
RETURN NUMBER
AS
  diff NUMBER;
BEGIN
  diff :=  CASE datepart
    WHEN 'day'   THEN TRUNC(date_to,'DD') - TRUNC(date_from, 'DD')
    WHEN 'week'  THEN (TRUNC(date_to,'DAY') - TRUNC(date_from, 'DAY')) / 7
    WHEN 'month' THEN MONTHS_BETWEEN(TRUNC(date_to, 'MONTH'), TRUNC(date_from, 'MONTH'))
    WHEN 'year'  THEN EXTRACT(YEAR FROM date_to) - EXTRACT(YEAR FROM date_from)
  END;
  RETURN diff;
END;";

년의 차이를 찾아야 합니다.윤년이 366일일 경우 1년이 됩니다.

저는 오라클에서 별로 일하지 않습니다만, 이것을 개선해 주세요.방법은 다음과 같습니다.

SELECT CASE
          WHEN    ( (fromisleapyear = 'Y') AND (frommonth < 3))
               OR ( (toisleapyear = 'Y') AND (tomonth > 2)) THEN
             datedif / 366
          ELSE
             datedif / 365
       END
          yeardifference
  FROM (SELECT datedif,
               frommonth,
               tomonth,
               CASE
                  WHEN (       (MOD (fromyear, 4) = 0)
                           AND (MOD (fromyear, 100) <> 0)
                        OR (MOD (fromyear, 400) = 0)) THEN
                     'Y'
               END
                  fromisleapyear,
               CASE
                  WHEN (   (MOD (toyear, 4) = 0) AND (MOD (toyear, 100) <> 0)
                        OR (MOD (toyear, 400) = 0)) THEN
                     'Y'
               END
                  toisleapyear
          FROM (SELECT (:todate - :fromdate) AS datedif,
                       TO_CHAR (:fromdate, 'YYYY') AS fromyear,
                       TO_CHAR (:fromdate, 'MM') AS frommonth,
                       TO_CHAR (:todate, 'YYYY') AS toyear,
                       TO_CHAR (:todate, 'MM') AS tomonth
                  FROM DUAL))

Oracle SQL Developer의 경우 다음 SQL 행을 사용하여 년의 차이를 계산할 수 있었습니다.이는 0년에서 10년 사이의 연수를 얻기 위한 것이었다.다른 응답과 같은 사례를 수행하여 if를 처리할 수도 있습니다.해피 코딩!

TRUNC((MONTHS_BETWEEN(<DATE_ONE>, <DATE_TWO>) * 31) / 365) > 0 and TRUNC((MONTHS_BETWEEN(<DATE_ONE>, <DATE_TWO>) * 31) / 365) < 10

언급URL : https://stackoverflow.com/questions/7943055/oracle-date-difference-to-get-number-of-years

반응형