년수를 얻기 위한 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
'programing' 카테고리의 다른 글
node.display에 json 요건이 있습니까? (0) | 2023.03.17 |
---|---|
CSS - 아이폰 및 Safari의 선택 메뉴에서 옵션 숨기기 (0) | 2023.03.17 |
새로 만든 이미지를 새 탭에서 열려면 어떻게 해야 합니까? (0) | 2023.03.12 |
반응 원어민에서 전역 변수/상수 (0) | 2023.03.12 |
각도 2.0은 $120에 해당합니다.$140 (0) | 2023.03.12 |