2013-08-28 66 views
1

有沒有一種方法可以確定Teradata SQL一年中的第一天?Teradata確定年度第一天

例如,我用它來查找每月的第一天:

SELECT dt + (1 - EXTRACT(DAY FROM dt)) AS dt 

我知道我可以提取一年內直接使用YEAR()但我想輸出的結果作爲一個日期,以便將工作在一些外部圖表中。

我嘗試這樣做,但它在指定的日期開始時加入了一堆空間:

CONCAT(YEAR(dt),'-01-01') 

回答

1

想通了:

ADD_MONTHS(dt, -(EXTRACT(MONTH FROM dt) - 1)) + (1 - EXTRACT(DAY FROM dt)) 
0

試試這個。

選擇日期 - DAYOFYEAR(日期)+1

1

最有效的方法是基於內部存儲,並可以很容易地放入SQL-UDF的:

REPLACE FUNCTION first_day_of_year(yr INTEGER) 
RETURNS DATE 
SPECIFIC first_day_of_year_INT 
RETURNS NULL ON NULL INPUT 
CONTAINS SQL 
DETERMINISTIC 
COLLATION INVOKER 
INLINE TYPE 1 
RETURN 
    (yr - 1900) * 10000 + 101 (DATE) 
; 
REPLACE FUNCTION first_day_of_year(cdate DATE) 
RETURNS DATE 
SPECIFIC first_day_of_year_DT 
RETURNS NULL ON NULL INPUT 
CONTAINS SQL 
DETERMINISTIC 
COLLATION INVOKER 
INLINE TYPE 1 
RETURN 
    first_day_of_year(EXTRACT(YEAR FROM cdate)) 
; 

編輯:

由於TD14.10有TRUNC(dt, 'Y')

3

dnoeth的應用程序roach對於長期優化工作很酷,但在我看來,簡單的答案是Jeffrey's或以下。不確定哪一個使用較少資源:

select cast(extract(year from current_date)||'0101' as date format 'yyyymmdd');