sql - SQL Netezza 中的 SYS_CALENDAR 函数
问题描述
请
如何运行在 SQL Netezza 中生成日历的查询,如下面的与 Teradata 一起使用的查询
SELECT *
FROM SYS_CALENDAR.Calendar
where calendar_date BETWEEN '2021-01-01' and current_date
解决方案
Teradata在和SYS_CALENDAR.Calendar
之间的每个日期都有一行。最好重新创建一次,然后在 Netezza 中使用视图1900-01-01
2100-12-31
一次性初始化
-- A one time table to house all dates between 1900 and 2100
create table t_calendar (dt date);
-- Insert all dates once. Alternatively this SQL can be used
-- in the view, but that will slow things down
INSERT INTO T_CALENDAR
SELECT '1900-01-01'::DATE +
(10000*a.idx + 1000*b.idx + 100*c.idx + 10*d.idx + e.idx) AS dt
FROM _v_vector_idx a,
_v_vector_idx b,
_v_vector_idx c,
_v_vector_idx d,
_v_vector_idx e
WHERE a.idx < 8 -- there are less than 80000 days between 1900-2100
AND b.idx < 10
AND c.idx < 10
AND d.idx < 10
AND e.idx < 10
AND dt <= '2100-12-31' :: DATE
完成后,日历视图可以定义如下
create or replace view calendar as
select
dt as calendar_date,
date_part('dow', dt) as day_of_week,
date_part('day', dt) as day_of_month,
date_part('doy', dt) as day_of_year,
date_part('days', '1900-01-01'::date - dt) as day_of_calendar
-- add others as necessary
from t_calendar
根据需要使用视图定义和Netezza 日期函数向该视图添加更多列。
推荐阅读
- java - 如何在 Spring 中使用 Autowired 注解
- ionic-framework - 在后台模式下获取推送通知事件
- c++ - 在 C++ 中读取原始字节数据
- dart - Dart Flutter中如何在后台上传文件到服务器?
- spring-security - Spring security 得到 403 虽然 permitAll 在那里?
- c++ - 使用 QNetworkAccessManager 在登录页面上假点击按钮
- python - 带有 python 的 Jira API 在有效凭据上返回错误 401
- c - 如何将 libxml2 链接到 Windows 中的 C 项目
- visual-studio - 在 Visual Studio 中删除并重新连接到 TFS 项目
- typescript - Vuex 和 vue-property-decorator 与 $store 的反应性