Date ranges and business calendars beyond recursion and Teradata SYS_CALENDAR

In a previous article, Roland explained how to use recursion to build a data range without touching a physical table. 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 efficacy of accessing a single row through a single AMP. Teradata adeptly computes the SQL recursive statement internally.

teradata sys_calendar

Using this template query as a starting point, one can efficiently extract more detailed periods (such as the first day of the month or specific weekdays) by adjusting the EXPAND ON parameters. This allows for better customization to match the needs of various business calendars or date ranges.

Related Services

⚡ Need Help Optimizing Your Data Platform?

We cut data platform costs by 30–60% without hardware changes. 25+ years of hands-on tuning experience.

Explore Our Services →

📋 Considering a Move From Teradata?

Get a personalized migration roadmap in 2 minutes. We have migrated billions of rows from Teradata to Snowflake, Databricks, and more.

Free Migration Assessment →

📊 Data Platform Migration Survey

Help us map where the industry is heading. Results are public — see what others chose.

1. What is your current data platform?

2. Where are you migrating to (or evaluating)?

Migrating FROM
Migrating TO

Thanks for voting! Share this with your network.

Follow me on LinkedIn for daily insights on data warehousing and platform migrations.

Stay Ahead in Data Warehousing

Get expert insights on Teradata, Snowflake, BigQuery, Databricks, Microsoft Fabric, and modern data architecture — delivered to your inbox.

3 thoughts on “Date ranges and business calendars beyond recursion and Teradata SYS_CALENDAR”

  1. Hello! There is a trick to do this without table access at all.
    Normally, it is prohibited to do EXPAND without volatiletempperm table reference, even if there is pseudo-table, so normally CTEs won’t help.
    But if we add any non-syntax sugar function anywhere in the request, it, suddenly, works. Like this:

    WITH CTE AS
    (SELECT PERIOD(Trunc(DATE ‘2020-09-01’, ‘DD’), Last_Day(DATE ‘2020-10-01’) + 1) AS prd)
    SELECT prd_ex FROM CTE t
    EXPAND ON prd AS prd_ex;

    This:

    WITH CTE AS
    (SELECT PERIOD(DATE ‘2020-09-01’, DATE ‘2020-10-31’ + 1) AS prd
    ,Greatest(1,1) AS Fake)
    SELECT prd_ex FROM CTE t
    EXPAND ON prd AS prd_ex;

    Or this:

    SELECT prd_ex
    FROM (SELECT 1 AS A) t
    WHERE Nvl(1,1) = 1
    EXPAND ON PERIOD(DATE ‘2020-09-01’, DATE ‘2020-10-31’ + 1) AS prd_ex;

    Reply

Leave a Comment

DWHPro

Expert network for enterprise data platforms. Senior consultants, project teams built for your challenge — across Teradata, Snowflake, Databricks, and more.

📍Vienna, Austria & Jacksonville, Florida

Quick Links
Services Team Teradata Book Blog Contact Us
Connect
LinkedIn → [email protected]
Newsletter

Join 4,000+ data professionals.
Weekly insights on Teradata, Snowflake & data architecture.