列出所有MMM-YYYY组合年份

时间:2011-08-05 17:36:00

标签: sql db2

如何在DB2中列出这些数据?

FiscalMonthYear
----------
Dec-2010
Jan-2011
Feb-2011
..
Nov-2011

第一个MM-YYYY组合总是'Dec'+' - '+ CHAR(CURRENT YEAR - 1)

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作为连接条件 - 使用月份编号)。