在iSeries中创建日期表(OS400)

时间:2015-01-20 17:51:39

标签: sql db2 ibm-midrange db2-400

早上好!

尝试为我的iSeries创建日期表。从2014年1月1日开始直到12/31/2115,每个日期只需要一行,所以我还有一百多年。

我想使用SQL并使用CYYDDMM格式的日期。我试图从这里和其他一些网站修改几个帖子,但没有运气。看来,获得我所需要的SQL是超越我有限的知识。

该表是使用一个整数的列(shift_date)创建的。非常感谢任何帮助!

提前致谢!

马特

3 个答案:

答案 0 :(得分:2)

DB2和许多其他DBMS允许recursive SQL通过公用表表达式(CTE)。

答案 1 :(得分:2)

基于@Fred和@Charles提供的链接,这是一个在我的V7.2机器上运行的SQL语句:

WITH ALL_DAYS(DT) AS
  ( VALUES (DATE('2014-01-01'))
      UNION ALL
    SELECT DT + 1 DAY FROM ALL_DAYS
    WHERE  DT < '2115-12-31'
  )
SELECT DT, 
 cast(case 
    when substr(char(dt), 2, 1) ='0' then '1' 
    when substr(char(dt), 2, 1) ='1' then '2' 
    when substr(char(dt), 2, 1) ='2' then '3' 
  end concat
  substr(char(dt), 3, 2) concat
  substr(char(dt), 6, 2) concat
  substr(char(dt), 9, 2) as decimal(7, 0)) as cyymmdd 
FROM ALL_DAYS;

您无需在Microsoft工具中执行此操作。 IBM i带有几个你可以使用的工具(绿色屏幕上的STRSQL和PC上的IBM i Navigator)以及SQuirreL等第三方工具。基本上,任何直接执行SQL语句的东西都可以工作,包括编写自己的.NET程序。您甚至可以让RPG程序员将其嵌入到程序中并从那里运行它。

答案 2 :(得分:1)

在“DB2 Web Query for i入门”中找到红皮书:
http://www.redbooks.ibm.com/abstracts/sg247214.html

附录B - 日期和时间功能 - 有一个部分,“使用日期转换表转换为日期”。这涉及创建,填充和使用日期转换表。它还包括可用于创建和填充此类表的SQL语句。

或者,上面链接的REDBOOK页面有一个“附加材料”链接,您可以从中下载所讨论的日期转换表/语句作为保存文件。