2014-12-02 161 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