2014-12-02 41 views
1

我正在尝试获取当季日期中的哪一天。获取季度中的天数Teradata

例如,如果我给2012年1月25日,那么产量应该是25.因为这是本季度的第25天。

同样,如果我给02/01/2012它应该给32作为输出。

我能够获得本季度的第一天,但​​无法获得本季度的哪一天。

平台是Teradata。日历没有day_of_quarter的选项,这正是我正在寻找的。鉴于日期,我需要知道季度的一天。

请帮忙。先谢谢你。

+0

什么版本的Teradata?这是标准日历还是商业日历季度? – 2014-12-02 14:24:47

+0

This Teradata 14 – TD123 2014-12-02 17:14:12

回答

1

TRUNC(datecol)返回季度的第一天, date1 - date2返回天之间的数字:

SELECT (datecol - TRUNC(datecol, 'Q')) + 1 AS day_of_quarter 

你可以把这个计算到SQL UDF,或者为一列添加到您现有的日历表。

+0

谢谢。完美的作品! – TD123 2014-12-02 18:08:11

+0

第二季度第16天TRUNC()的舍入如何影响这个@dnoeth? – 2014-12-02 18:23:25

+0

@RobPaller,我也在想这个。我在下面的查询中尝试了它,并得到了与案例声明完全相同的结果。 – Andrew 2014-12-02 18:57:52

1

这是基于日历季度。如果您有某种商业日历,您可以调整案例陈述。

select 
c.*, 
CASE WHEN MONTH(calendar_date) BETWEEN 1 AND 3 
     THEN CAST(((calendar_date/10000) * 10000) + 101 AS DATE) 
     WHEN MONTH(calendar_date) BETWEEN 4 AND 6 
     THEN CAST(((calendar_date/10000) * 10000) + 401 AS DATE) 
     WHEN MONTH(calendar_date) BETWEEN 7 AND 9 
     THEN CAST(((calendar_date/10000) * 10000) + 701 AS DATE) 
     WHEN MONTH(calendar_date) BETWEEN 10 AND 12 
     THEN CAST(((calendar_date/10000) * 10000) + 1001 AS DATE) 
END as First_Day_Of_Quarter, 
calendar_date - first_day_of_quarter + 1 as Day_Of_Quarter 
from 
sys_calendar.calendar c 
where 
year_of_calendar = 2014 
order by 1 asc 
+0

谢谢安德鲁。但我期待用我的表中的日期替换calendar_date,它不适用于此。这是我想要做的: – TD123 2014-12-02 17:30:05

+0

select \t CASE \t当MONTH(cast(DayDate as date)))1 and 3 then CAST(((cast(DayDate as date))/ 10000)* 10000)+ 101 AS (日(日期))/ 10000)+ 401 AS日期) 当月(铸造(日期日期))日期(铸造(日期日期))日期4和6之间铸造(((铸(日期日期)/ 10000) )7和9之间012(16)(日期日期))((日(铸(日期日期))/ 10000)* 10000)+ 701日期)当月(日期日期)))10和12之间 THEN CAST(( (dateDate as date))/ 10000)* 10000)+ 1001 AS DATE)END as First_Day_Of_Quarter, DayDate- first_day_of_quarter + 1 as Day_Of_Quarter from LU_DayComplete – TD123 2014-12-02 17:31:38

+0

我得到一个错误5407:日期时间和间隔时间无效操作 – TD123 2014-12-02 17:43:12