我正在研究像这样的代码
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中两个给定日期之间的日期列表。有人可以帮我吗?提前谢谢。
答案 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