在Oracle中使用DateDiff()

Mar*_*tin 0 sql oracle date-arithmetic

请考虑以下查询.我已经意识到fans.checkout-fans.checkin用来计算两个日期(以天为单位)之间的差异并不是一个好主意.如何重写它以便我可以使用DateDiff()?我似乎无法简单地fans.checkout-fans.checkin用这个功能替换.

select x.name
from (
    select fans.name,
    dense_rank() over (order by fans.checkout-fans.checkin desc) as rnk
    from fans 
    where fans.checkout-fans.checkin is not null
    ) x
where x.rnk = 1
Run Code Online (Sandbox Code Playgroud)

Jus*_*ave 7

为什么你认为减去两个日期以获得它们之间的天数不是一个好主意?这肯定是在Oracle中进行这种日期算术的标准方法.

DateDiff不是Oracle中存在的函数.我知道它存在于SQL Server中.当然,你可以编写自己的函数并调用它

CREATE OR REPLACE FUNCTION dateDiff( p_dt1 IN DATE,
                                     p_dt2 IN DATE )
  RETURN NUMBER
IS
BEGIN
  RETURN p_dt1 - p_dt2;
END;
Run Code Online (Sandbox Code Playgroud)

但是,这并不是显而易见的,这样做会带来什么好处而不是简单地继续减去两个日期.

  • @Tangler - 无论两个日期相隔多远,减去两个日期都有效.显然,你必须考虑如何正确地解释这些数据(即因为两个日期相隔365天并不意味着它们相隔1年).如果范围很大('months_between`)而不是试图弄清楚91天是否是3个月或者不想记住哪个月有31天,那么人类可能更愿意看到两个日期之间的月数. (2认同)