【问题标题】:Subtract a given date from sysdate to get the number of days从 sysdate 中减去给定日期以获取天数
【发布时间】:2013-05-16 13:11:50
【问题描述】:

我正在尝试做这样的事情

 v_target_date := trunc (sysdate) - trunc (TO_DATE (iv_target_date, 'DD-MM-YYYY HH:MI AM'));

但我没有得到我想要的东西?我想看看当前 sysdate 和给定日期的天数有什么区别?所以如果它超过一个月,我应该得到 30 多天等等......

我想根据从给定日期和 sysdate 过去的天数应用逻辑。如果超过 48 小时(2 天),我可以应用逻辑 1,否则应用逻辑 2

【问题讨论】:

  • 减去两个DATE 类型将为您提供天数,因此您应该得到您想要的。你的起始iv_target_date 值是多少,你得到了什么,你想得到什么?你会得到什么?这个数字是不是有点太低了——也许你想trunc 结果而不是两个日期? v_target_dateiv_target_date 是什么类型?看起来iv_target_date 是一个字符串,因为如果它是一个DATE,你会做一个不必要的TO_DATE,如果v_target_date 是一个数字,那么它是一个有点奇怪的名字......

标签: oracle plsql


【解决方案1】:

如果您只想截断 48 小时,我发现 INTERVAL 函数更具可读性。你可以这样做(我省略了截断;根据需要应用它):

dateMinus48Hours := SYSDATE - INTERVAL '48' HOUR;
IF TO_DATE(iv_target_date, 'DD-MM-YYYY HH:MI AM') < dateMinus48Hours THEN
    ... more than 48 hours ago
ELSE
    ... not more than 48 hours ago
END IF;

或者你可以使用这个;你会得到相同的结果:

dateMinus48Hours := SYSDATE - INTERVAL '2' DAY;

【讨论】:

  • dateMinus48Hours 的数据类型是什么?
  • 对不起;刚刚看到你的问题。这是一个DATE 类型。
【解决方案2】:

48 小时只是 2 天,所以一个简单的替代方案是:

IF TO_DATE (iv_target_date, 'DD-MM-YYYY HH:MI AM') < SYSDATE - 2 THEN
  -- logic 1
ELSE
  -- logic 2
END IF;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    相关资源
    最近更新 更多