0

好吧,所以我检查了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 中工作。

谁能帮我这个?

非常感谢!

-马修

4

2 回答 2

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 天。
于 2012-09-17T04:18:10.053 回答
0

最简单的方法是在 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 命令中

于 2014-10-21T06:28:39.683 回答