【问题标题】:Difference in days between 2 dates Oracle SQL2 个日期之间的天数差异 Oracle SQL
【发布时间】:2012-09-09 06:39:25
【问题描述】:

好的,所以我检查了许多关于 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 中工作。

谁能帮我解决这个问题?

非常感谢!

-马修

【问题讨论】:

  • Oracle中purch_date是什么数据类型?
  • shrug 如果我只检索 purch_date 我得到 28-OCT-2004

标签: sql oracle datediff


【解决方案1】:

假设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 天。

【讨论】:

    【解决方案2】:

    最简单的方法是在 oracle 中编写一个函数,例如 mysql 中的 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 命令中

    【讨论】:

      猜你喜欢
      • 2010-11-08
      • 1970-01-01
      • 2020-03-13
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 2016-03-20
      相关资源
      最近更新 更多