列出两个给定日期之间的天数

时间:2014-12-04 23:46:03

标签: sql teradata

我正在研究像这样的代码

CREATE FUNCTION edw_devdb.test ( StartDate Date, EndDate Date)
     RETURNS DATE
     LANGUAGE SQL
     DETERMINISTIC
     CONTAINS SQL
     SPECIFIC test.myudf
     CALLED ON NULL INPUT
     SQL SECURITY DEFINER
     COLLATION INVOKER
     INLINE TYPE 1
     RETURN 
SYS_CALENDAR.Calendar.calendar_date between StartDate and EndDate;

我需要一个函数来返回teradata中两个给定日期之间的日期列表。有人可以帮我吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

您无法在Teradata中的SQL UDF中执行此操作。

为什么在函数中需要这个列表?如果StartDate和EndDate是表中的列,则可以使用Teradata的EXPAND ON:

SELECT BEGIN(pd)
FROM SYS_CALENDAR.CALENDAR  -- your table here
WHERE calendar_date = DATE
EXPAND ON PERIOD(StartDate, EndDate + 1) AS p

当然,您将使用自己的表而不是SYS_CALENDAR.CALENDAR,这只是为了获得一行。

答案 1 :(得分:-1)

在你的功能中使用这个逻辑

; WITH  CTE as
 (
     SELECT CAST('01/jan/2014' AS DATE) as DATES //Use Fromdate as parameter instead of '01/jan/2014'
     UNION ALL
     SELECT DATEADD(DAY,1,DATES )
     FROM    CTE
     WHERE   DATES < cast('10/jan/2014' AS DATE) //Use Todate as parameter instead of '01/jan/2014'
 )
 SELECT DISTINCT DATES 
 FROM    CTE