有沒有一種方法可以確定Teradata SQL一年中的第一天?Teradata確定年度第一天
例如,我用它來查找每月的第一天:
SELECT dt + (1 - EXTRACT(DAY FROM dt)) AS dt
我知道我可以提取一年內直接使用YEAR()
但我想輸出的結果作爲一個日期,以便將工作在一些外部圖表中。
我嘗試這樣做,但它在指定的日期開始時加入了一堆空間:
CONCAT(YEAR(dt),'-01-01')
有沒有一種方法可以確定Teradata SQL一年中的第一天?Teradata確定年度第一天
例如,我用它來查找每月的第一天:
SELECT dt + (1 - EXTRACT(DAY FROM dt)) AS dt
我知道我可以提取一年內直接使用YEAR()
但我想輸出的結果作爲一個日期,以便將工作在一些外部圖表中。
我嘗試這樣做,但它在指定的日期開始時加入了一堆空間:
CONCAT(YEAR(dt),'-01-01')
想通了:
ADD_MONTHS(dt, -(EXTRACT(MONTH FROM dt) - 1)) + (1 - EXTRACT(DAY FROM dt))
試試這個。
選擇日期 - DAYOFYEAR(日期)+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')
dnoeth的應用程序roach對於長期優化工作很酷,但在我看來,簡單的答案是Jeffrey's或以下。不確定哪一個使用較少資源:
select cast(extract(year from current_date)||'0101' as date format 'yyyymmdd');