2

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

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

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

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

我试过这个,但它在日期开始时添加了一堆空格:

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

5 回答 5

4

dnoeth 的方法对于工作的长期优化来说很酷,但是,在我看来,简单的答案是 Jeffrey 的或以下的。不确定哪一个使用较少的资源:

select cast(extract(year from current_date)||'0101' as date format 'yyyymmdd');
于 2015-12-01T22:47:59.013 回答
2

简洁优雅的 TRUNC(current_date, 'Y')

于 2018-06-15T06:08:18.390 回答
1

弄清楚了:

ADD_MONTHS(dt, -(EXTRACT(MONTH FROM dt) - 1)) + (1 - EXTRACT(DAY FROM dt))
于 2013-08-28T20:34:28.713 回答
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')

于 2013-08-28T21:39:25.923 回答
0

尝试这个。

选择日期 - dayofyear(date)+1

于 2013-08-28T20:55:04.090 回答