创建20年的DB2日历表,其列取决于原始日期

凯尔·莱卡(Kyle Lekha)

我正在尝试创建20年(从2000年到2020年)的日历表。目标是每天有一行,以及一些其他列,这些列将根据生成的日历日期使用逻辑。例如,将“一”列作为日历日期(2000-01-01),将“年”列从日历日期列中的值中读取年份(2000)。

该表的代码如下:

CREATE TABLE TEST.CALENDAR(
CALENDAR_DATE         DATE    NOT NULL,
CALENDAR_YEAR         INTEGER NOT NULL,
CALENDAR_MONTH_NUMBER INTEGER NOT NULL,
CALENDAR_MONTH_NAME   VARCHAR(100),
CALENDAR_DAY_OF_MONTH INTEGER NOT NULL,
CALENDAR_DAY_OF_WEEK  INTEGER NOT NULL,
CALENDAR_DAY_NAME     VARCHAR(100),
CALENDAR_YEAR_MONTH   INTEGER NOT NULL);

目前,我有一堆插入语句,这些语句会在20年内为该表手动插入行。我正在寻找使用变量代替插入语句,并且该插入语句将以每日增量插入数据,直到开始日期变量不小于结束日期变量为止。

目前,我无法使它完全起作用,更不用说为任何其他列提供任何逻辑了。

变量insert语句的代码:

declare startdate DATE, enddate DATEset startdate = '2000-01-01'
set enddate = DATEADD(yy,20,startdate)
while startdate < enddate
begin insert into TEST.CALENDAR (CALENDAR_DATE) select startdate
set startdate = DATEADD(dd,1,startdate) end

有人会对我如何使它起作用有任何想法吗?

专线小巴

您可以使用DB2递归查询和日期函数来做到这一点:

考虑:

with cte (
    calendar_date,
    calendar_year,
    calendar_month_number,
    calendar_month_name,
    calendar_day_of_month,
    calendar_day_of_week,
    calendar_day_name
) as (
    select 
        calendar_date,
        year(calendar_date),
        month(calendar_date),
        monthname(calendar_date),
        dayofmonth(calendar_date),
        dayofweek(calendar_date),
        dayname(calendar_date)
    from (values(date('2000-01-01'))) as t(calendar_date)
    union all
    select 
        calendar_date + 1,
        year(calendar_date + 1),
        month(calendar_date + 1),
        monthname(calendar_date + 1),
        dayofmonth(calendar_date + 1),
        dayofweek(calendar_date + 1),
        dayname(calendar_date + 1)
    from cte where calendar_date < date('2021-01-01')
)
select * from cte

注意:我不清楚该列的CALENDAR_YEAR_MONTH含义,因此我将其分开。

前10天的DB Fiddle演示

CALENDAR_DATE | CALENDAR_YEAR | CALENDAR_MONTH_NUMBER | CALENDAR_MONTH_NAME | CALENDAR_DAY_OF_MONTH | CALENDAR_DAY_OF_WEEK | CALENDAR_DAY_NAME 
------------:| ------------:| --------------------:| ------------------:| --------------------:| -------------------:| ----------------:2000年1月1日
   | 2000 | 1 | 一月 1 | 7 | 2000年1月2日星期六
   | 2000 | 1 | 一月 2 | 1 | 周日
   | 2000 | 1 | 一月 3 | 2 | 星期一
   2000-01-04 | 2000 | 1 | 一月 4 | 3 | 2000年1月5日星期二
   | 2000 | 1 | 一月 8 | 7 | 星期六
   2000-01-05 | 2000 | 1 | 一月 5 | 4 | 2000年1月6日星期三
   | 2000 | 1 | 一月 6 | 5 | 2000年1月7日星期四
   | 2000 | 1 | 一月 7 | 6 | 2000年1月9日,星期五
   2000-01-09 | 2000 | 1 | 一月 9 | 1 | 2000年1月10日星期日
   | 2000 | 1 | 一月 10 | 2 | 星期一

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在熊猫中创建日历表(日期维度)

来自分类Dev

JDK 6日历2041年10月20日BUG

来自分类Dev

JDK 6日历2041年10月20日BUG

来自分类Dev

spark scala从Dataframe创建列,其值取决于日期时间范围

来自分类Dev

尝试在 js 中创建日历表

来自分类Dev

TSQL日历表,从日期算起10个工作日

来自分类Dev

日历表枢轴

来自分类Dev

每个日期分组行,使用日历表

来自分类Dev

如何使用日历表填补日期空白

来自分类Dev

DB2日期比较

来自分类Dev

COALESCE db2日期

来自分类Dev

如何将具有开始日期和结束日期的现有表加入现有日历表以计算工作日

来自分类Dev

日历中的事件重点取决于日期公式

来自分类Dev

Swift 3日历

来自分类Dev

IBM iSeries DB2朱利安日期/日历日期SQL转换

来自分类Dev

需要创建空条目取决于列

来自分类Dev

如何将varchar(2020年1月1日)中的日期转换为DB2 sql中的日期类型?

来自分类Dev

从当前月份开始的月份中打印3年日历

来自分类Dev

如何将float数组转换为365日历白天?(不包括leap年)

来自分类Dev

用日历表格设置日期

来自分类Dev

PHP检查两个日期时间是否不在同一日历日

来自分类Dev

SQL查找两个UTC日期是否在同一日历日

来自分类Dev

SQL Server:检查日历表中的某些日期是否在周末

来自分类Dev

使用列创建表布局取决于Android中的微调器

来自分类Dev

如何创建一个SQL列,其值取决于(映射到)现有查找列的值?

来自分类Dev

使用日历表的用户活动报告

来自分类Dev

使用日历表的用户活动报告

来自分类Dev

power bi 中的日历表

来自分类Dev

合并行取决于2列的值