如何在DB2中列出这些数据?
FiscalMonthYear
----------
Dec-2010
Jan-2011
Feb-2011
..
Nov-2011
第一个MM-YYYY组合总是'Dec'+' - '+ CHAR(CURRENT YEAR - 1)
答案 0 :(得分:2)
首先,我不建议加入像这样的(格式化)文本列(尤其是非常依赖语言的文本列)。
一般来说,尝试加入这样的月/年:
SELECT columnList
FROM tableA
JOIN tableB
ON tableB.numericMonth = MONTH(tableA.date)
AND tableB.numericYear = YEAR(tableA.date)
虽然应该注意,最好有两个日期列加入,而不是像这样分开的列。
生成(分隔的,数字)范围非常简单:
WITH date_range (month, year) as (SELECT 12, 2011
FROM sysibm/sysdummy1
UNION ALL
SELECT month - 1, 2012
FROM date_range
WHERE month > 1)
虽然,希望你真的会加入(如果可能的话)实际日期,此时声明应该是这样的:
SELECT columnList
FROM tableA
WHERE tableDate BETWEEN '2011-12-01' and '2012-11-30'
DB2中还有一个MONTHNAME()
函数,它将返回月份的(长)名称。生成这些结果:
December
November
October
September
August
July
June
May
April
March
February
January
...您可以通过子字符串获取前3个字符。请记住,返回的值是语言相关的(基于正在运行的作业的系统设置),因此使用连接列是一件很糟糕的事情(这就是为什么我不建议使用month-name作为连接条件 - 使用月份编号)。