首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >时间戳和时间间隔: NUMTOYMINTERVAL SYSTDATE计算SQL查询

时间戳和时间间隔: NUMTOYMINTERVAL SYSTDATE计算SQL查询
EN

Stack Overflow用户
提问于 2012-12-03 18:39:11
回答 2查看 2.2K关注 0票数 0

我正在做一个家庭作业的问题,我已经接近了,但我想我需要一些数据转换的帮助。或sysdate - start_date计算

问题是:

使用EX模式,编写一条SELECT语句,从Date_Sample表(格式如下)中检索date_id和start_date,后面跟着一个名为Years_and_Months_Since_Start的列,该列使用interval函数检索start_date和sysdate之间经过的年数和月数。(您的值将根据您完成本实验的日期而有所不同。)仅显示起始日期等于任何年份的2月28日的记录。

代码语言:javascript
复制
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表:

代码语言:javascript
复制
DATE_ID     NUMBER NOT Null

START_DATE  DATE

我写了下面的代码:

代码语言:javascript
复制
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页。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-03 18:59:18

您会希望numtoyminterval中的MONTHS_BETWEEN作为减去两个日期变量的乘积,以天为单位给出答案,这对您来说是不可用的,而它如此之高的原因是您已经告诉Oracle,答案是以年为单位的!还可以在to_char上使用fm修饰符,以防止多余的空格。

代码语言:javascript
复制
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';
票数 1
EN

Stack Overflow用户

发布于 2013-05-04 14:50:08

你可以像这样简化这个答案

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13681506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档