In a previous article, Roland explained how to build a data range without touching a physical table by using recursion. This time, we explore an alternative approach that avoids recursion at the expense of single-AMP, single-row access. We can use this approach to build both a wide date range as well as a narrow one. We can also go beyond the limits of the Teradata SYS_CALENDAR table. The latter ends on 2100-12-31, which might be closer than we think :)).
With no further ado, here is the template query building atop EXPAND ON clause, a Teradata extension to the ANSI SQL:2011 standard.
SELECT Cast(Begin(thePeriod) AS DATE) AS BUSINESS_DATE FROM dbc.dbcinfov WHERE infokey = 'VERSION' EXPAND ON Period(DATE '2101-01-01', DATE '2101-02-01') AS thePeriod BY ANCHOR PERIOD DAY;
The execution plan confirms the promise of single-AMP, single-row access. Teradata efficiently calculates the equivalent of an SQL recursive statement internally.
Using this template query as a starting point, one can adjust the EXPAND ON parameters to efficiently extract more fine periods (e.g., the first day of the month or specific weekdays) and better serve the needs of various business calendars or dates ranges.