有没有办法在 Teradata SQL 中确定一年的第一天?
例如,我用它来查找一个月的第一天:
SELECT dt + (1 - EXTRACT(DAY FROM dt)) AS dt
我知道我可以直接使用提取年份,YEAR()
但我想将结果输出为日期,以便它可以在一些外部图表中使用。
我试过这个,但它在日期开始时添加了一堆空格:
CONCAT(YEAR(dt),'-01-01')
dnoeth 的方法对于工作的长期优化来说很酷,但是,在我看来,简单的答案是 Jeffrey 的或以下的。不确定哪一个使用较少的资源:
select cast(extract(year from current_date)||'0101' as date format 'yyyymmdd');
简洁优雅的 TRUNC(current_date, 'Y')
弄清楚了:
ADD_MONTHS(dt, -(EXTRACT(MONTH FROM dt) - 1)) + (1 - EXTRACT(DAY FROM dt))
最有效的方式是基于内部存储,并且可以很容易地放入 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')
尝试这个。
选择日期 - dayofyear(date)+1