2个日期Oracle SQL之间的天数差异

时间:2012-09-17 02:50:52

标签: sql oracle datediff

好吧,所以我在stackoverflow上检查了很多其他帖子,看看是否在任何地方都提到过,提供的答案对我来说没有意义......我在想他们在说些什么完全不同。

以下是我想要做的事情,使用Oracle SQL Developer:

- 从purch_date

中检索条目

- 获取当前年份purch_date和圣诞节之间的差异

* *因此,因此'2012'不能在那里进行硬编码。我需要检索它。

这是MySQL中100%工作的查询:

SELECT purch_id AS PURCH_ID, 
DATEDIFF(CONCAT(YEAR(NOW()),'-12-25'), purch_date) AS DAYS_TO_CHRISTMAS
FROM CS260USER.candy_purchase;

差不多,我需要在Oracle工作。

任何人都可以帮我吗?

非常感谢!

马修

2 个答案:

答案 0 :(得分:2)

假设purch_date被定义为DATE

SELECT purch_id,
       (trunc(sysdate, 'YYYY') +
         interval '11' month +
         interval '24' day) -
        purch_date days_to_christmas
  FROM CS260USER.candy_purchase;

几个笔记

  1. 如果purch_date有时间组件,您可能希望截断日期减法的结果。
  2. 如果这个查询在12月26日到12月31日期间执行,你仍然会看到今年的圣诞节(即过去的日期),而不是明年的圣诞节。例如,如果purch_date是12月30日,那么我希望结果是在下一个圣诞节前360天,而不是直到去年圣诞节的-5天。

答案 1 :(得分:0)

最简单的方法是在oracle中编写一个像DATEDIFF一样的函数,id就像这样:

function        datediff( p_what in varchar2, p_d1 in date, p_d2 in date) return number as  l_result    number; 
BEGIN
      select (p_d2-p_d1) * 
             decode( upper(p_what), 'SS', 24*60*60, 'MI', 24*60, 'HH', 24, NULL ) 
       into l_result from dual; 

      return l_result; 

END;

并将此函数称为:

DATEDIFF('YYYY-MM-DD', SYSTIMESTAMP, SYSTIMESTAMP)
你的sql命令中的