早上好!
尝试为我的iSeries创建日期表。从2014年1月1日开始直到12/31/2115,每个日期只需要一行,所以我还有一百多年。
我想使用SQL并使用CYYDDMM格式的日期。我试图从这里和其他一些网站修改几个帖子,但没有运气。看来,获得我所需要的SQL是超越我有限的知识。
该表是使用一个整数的列(shift_date)创建的。非常感谢任何帮助!
提前致谢!
马特
答案 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页面有一个“附加材料”链接,您可以从中下载所讨论的日期转换表/语句作为保存文件。