views/migration/teradata/sys_calendar.sql (36 lines of code) (raw):

/* * Copyright 2022 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* Emulation for Teradata's SYS_CALENDAR.CALENDAR table */ CREATE OR REPLACE VIEW SYS_CALENDAR.CALENDAR ( /* the date */ calendar_date, /* 1-7 day of week */ day_of_week, /* 1-n day of month */ day_of_month, /* 1-365 day of year */ day_of_year, /* 1-n day since the beginning of the calendar */ day_of_calendar, /* 1 if the date is a Monday and the first Monday of the month, 2 if it's a * Monday and the second Monday of the month, 4 for the fourth Tuesday, etc. */ weekday_of_month, /* 0-n week of the month. The first partial week is zero. * The first full week is 1. If the month starts on Sunday, there is no * week 0. */ week_of_month, /* 0-53 week of the year */ week_of_year, /* 0-n week of the calendar */ week_of_calendar, /* 1-3 month of the quarter */ month_of_quarter, /* 1-12 month */ month_of_year, /* 1-n month since the beginning of the calendar */ month_of_calendar, /* 1-4 quarter of the year */ quarter_of_year, /* 1-n quarter since the beginning of the calendar */ quarter_of_calendar, /* 1-n the year */ year_of_calendar ) AS SELECT r AS calendar_date, EXTRACT(DAYOFWEEK FROM r) AS day_of_week, EXTRACT(DAY FROM r) as day_of_month, EXTRACT(DAYOFYEAR FROM r) AS day_of_year, DATE_DIFF(r, DATE(1, 1, 1), DAY) AS day_of_calendar, CAST(FLOOR((EXTRACT(DAY FROM r) - 1) / 7) AS INT64) + 1 AS weekday_of_month, EXTRACT(WEEK FROM r) - EXTRACT(WEEK FROM DATE_TRUNC(r, MONTH)) + IF(EXTRACT(DAYOFWEEK FROM DATE_TRUNC(r, MONTH)) = 1, 1, 0) AS week_of_month, EXTRACT(WEEK FROM r) as week_of_year, DATE_DIFF(r, DATE(1, 1, 1), WEEK) as week_of_calendar, MOD(EXTRACT(MONTH FROM r) - 1, 3) + 1 as month_of_quarter, EXTRACT(MONTH FROM r) AS month_of_year, DATE_DIFF(r, DATE(1, 1, 1), MONTH) AS month_of_calendar, EXTRACT(QUARTER FROM r) AS quarter_of_year, 4 * EXTRACT(YEAR FROM r) + EXTRACT(QUARTER FROM r) AS quarter_of_calendar, EXTRACT(YEAR FROM r) as year_of_calendar FROM UNNEST(GENERATE_DATE_ARRAY('1900-1-1', '2100-1-1', INTERVAL 1 DAY)) AS r;