我正在做一个家庭作业的问题,我已经接近了,但我想我需要一些数据转换的帮助。或sysdate - start_date计算
问题是:
使用EX模式,编写一条SELECT语句,从Date_Sample表(格式如下)中检索date_id和start_date,后面跟着一个名为Years_and_Months_Since_Start的列,该列使用interval函数检索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的数据类型只有date。我试过了,但可能需要一些帮助才能把它做好。
我的计算出了一些问题,试图找出如何得到正确的间隔。不确定我是否已经给每个人提供了足够的信息,但如果我在你之前弄清楚了,我会让你知道的。
这是Murach的Oracle和SQL/PL一书的第17章中的一个问题,如果有人想要学习这一章的话。559页。
发布于 2012-12-03 18:59:18
您会希望numtoyminterval中的MONTHS_BETWEEN作为减去两个日期变量的乘积,以天为单位给出答案,这对您来说是不可用的,而它如此之高的原因是您已经告诉Oracle,答案是以年为单位的!还可以在to_char上使用fm修饰符,以防止多余的空格。
select date_id,
to_char(start_date, 'fmDay, Month DD, YYYY') as start_date,
extract(year from numtoyminterval(months_between(trunc(sysdate), start_date), 'month') )
|| '-' ||
extract(month from numtoyminterval(months_between(trunc(sysdate), start_date), 'month') )
as years_and_months_since_start
from your_table
where to_char(start_date, 'MM/DD') = '02/28';发布于 2013-05-04 14:50:08
你可以像这样简化这个答案
SELECT date_id, start_date, numtoyminterval(months_between(sysdate, start_date), 'month') as "Years and Months Since Start"
FROM date_sample
WHERE EXTRACT (MONTH FROM start_date) = 2 AND EXTRACT (DAY FROM start_date) = 28;https://stackoverflow.com/questions/13681506
复制相似问题