Teradata确定一年的第一天

时间:2013-08-28 20:09:20

标签: sql teradata

有没有办法确定Teradata SQL中一年的第一天?

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

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

我知道我可以直接使用YEAR()提取年份,但我希望将结果输出为日期,以便它可以在某些外部图表中使用。

我尝试了这个,但它在日期的开头添加了一堆空格:

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

5 个答案:

答案 0 :(得分:4)

dnoeth的方法很适合长期优化工作,但在我看来,简单的答案是杰弗里或以下。不确定哪一个使用更少的资源:

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

答案 1 :(得分:2)

简单而优雅       TRUNC(current_date,'Y')

答案 2 :(得分:1)

想出来:

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

答案 3 :(得分: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')

答案 4 :(得分:0)

试试这个。

  

选择日期 - 日期(日期)+1