有没有办法计算日期之间的年数。不确定如何做到这一点,同时考虑到leap和什么不是。是否可以在SELECT语句中执行IF语句?
谢谢
发布于 2011-10-30 13:16:46
我会使用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
。
发布于 2011-10-30 12:11:57
如果你只是想要年份的差异,有以下几点:
SELECT EXTRACT(YEAR FROM date1) - EXTRACT(YEAR FROM date2) FROM mytable
或者你也想要小数年?
SELECT (date1 - date2) / 365.242199 FROM mytable
根据谷歌的说法,365.242199是以天计算的一年。
发布于 2015-10-12 16:18:00
我必须实现一个year diff函数,它的工作方式类似于sybase datediff。在这种情况下,将计算实际年份差异,而不是四舍五入的日期差异。因此,如果有两个日期相隔一天,则年份差异可以是1(请参阅select datediff(year, '20141231', '20150101')
)。
如果必须以这种方式计算年份差异,则使用:
EXTRACT(YEAR FROM date_to) - EXTRACT(YEAR FROM date_from)
对于日志,(几乎)完整的datediff函数:
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;";
https://stackoverflow.com/questions/7943055
复制相似问题