【发布时间】:2012-12-03 10:39:10
【问题描述】:
我正在处理一个家庭作业问题,我很接近但我认为需要一些数据转换方面的帮助。或者 sysdate - start_date 计算
问题是:
使用 EX 架构,编写一个 SELECT 语句,从 Date_Sample 表(格式如下)中检索 date_id 和 start_date,然后是一个名为 Years_and_Months_Since_Start 的列,该列使用间隔函数来检索两者之间经过的年数和月数start_date 和 sysdate。 (您的值将根据您执行此实验的日期而有所不同。)仅显示开始日期的月和日等于(任何年份的)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';
但我的“自开始以来的年数和月数”列无法正常工作。当计算的日期是从 1999 年开始时,数年和数月的数字非常高。即,它应该是 13-8,我得到 5027-2,所以我知道它不正确。我使用了 NUMTOYMINTERVAL,这应该是正确的,但不要认为 sysdate-start_date 有效。 start_date 的数据类型只是日期。我尝试了 ROUND,但可能需要一些帮助才能使其正确。
我的计算出了点问题,并试图弄清楚如何在那里获得正确的间隔。不确定我是否向所有人提供了足够的信息,但如果我在你做之前弄清楚了,我会告诉你的。
这是 Murach 的 Oracle 和 SQL/PL 书第 17 章中的一个问题,是否有其他人正在尝试学习该章。第 559 页。
【问题讨论】: