Sql Teradata确定一年中的第一天

Sql Teradata确定一年中的第一天,sql,teradata,Sql,Teradata,在TeradataSQL中,有没有办法确定一年中的第一天 例如,我使用它来查找一个月的第一天: SELECT dt + (1 - EXTRACT(DAY FROM dt)) AS dt 我知道我可以使用year()直接提取年份,但我希望将结果作为日期输出,以便在某些外部图表中使用 我尝试过这个,但它在日期开始时添加了一堆空格: CONCAT(YEAR(dt),'-01-01') 我想出来了: ADD_MONTHS(dt, -(EXTRACT(MONTH FROM dt) - 1)) + (1

在TeradataSQL中,有没有办法确定一年中的第一天

例如,我使用它来查找一个月的第一天:

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))
试试这个

选择日期-年月日(日期)+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的方法对于工作的长期优化是很酷的,但是,在我看来,简单的答案是Jeffrey的或以下。不确定哪一个使用更少的资源:

select cast(extract(year from current_date)||'0101' as date format 'yyyymmdd');
素雅 TRUNC(当前日期“Y”)