我正在处理一个家庭作业问题,我很接近,但我认为需要一些数据转换方面的帮助。或 sysdate - start_date 计算
问题是:
使用 EX 模式,编写一个 SELECT 语句,从 Date_Sample 表(格式如下)中检索 date_id 和 start_date,然后是一个名为 Years_and_Months_Since_Start 的列,该列使用间隔函数检索 start_date 和系统日期。(您的值将根据您进行此实验的日期而有所不同。)仅显示开始日期的月和日等于 2 月 28 日(任何一年)的记录。
DATE_ID START_DATE YEARS_AND_MONTHS_SINCE_START
2 Sunday , February 28, 1999 13-8
4 Monday , February 28, 2005 7-8
5 Tuesday , February 28, 2006 6-8
我们引用这个问题的 EX 模式只是一个包含两列的 Date_Sample 表:
DATE_ID NUMBER NOT Null
START_DATE DATE
我写了这段代码:
SELECT date_id, TO_CHAR(start_date, 'Day, MONTH DD, YYYY') AS start_date ,
NUMTOYMINTERVAL((SYSDATE - start_date), 'YEAR') AS years_and_months_since_start
FROM date_sample
WHERE TO_CHAR(start_date, 'MM/DD') = '02/28';
但是我的 Years and months since start 列无法正常工作。当计算的日期是从 1999 年开始时,数年和数月的数字非常高。即,它应该是 13-8,我得到 5027-2,所以我知道它不正确。我使用了 NUMTOYMINTERVAL,这应该是正确的,但不要认为 sysdate-start_date 有效。start_date 的数据类型只是日期。我尝试了 ROUND,但可能需要一些帮助才能使其正确。
我的计算出了点问题,并试图弄清楚如何在那里获得正确的间隔。不确定我是否已向所有人提供了足够的信息,但如果我在您之前弄清楚,我会告诉您。
这是 Murach 的 Oracle 和 SQL/PL 书第 17 章中的一个问题,是否有其他人正在尝试学习该章。第 559 页。