Sql 列出年度的所有MMM-YYYY组合

Sql 列出年度的所有MMM-YYYY组合,sql,db2,Sql,Db2,如何在DB2中列出这些数据 FiscalMonthYear ---------- Dec-2010 Jan-2011 Feb-2011 .. Nov-2011 第一个MM-YYYY组合总是'Dec'+'-'+CHAR(当前年份-1)首先,我不建议加入这样的(格式化的)文本列(尤其是非常依赖于语言的内容)。 一般来说,请尝试这样加入月份/年份: SELECT columnList FROM tableA JOIN tableB ON tableB.numericMonth = MONTH(tab

如何在DB2中列出这些数据

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

第一个MM-YYYY组合总是'Dec'+'-'+CHAR(当前年份-1)

首先,我不建议加入这样的(格式化的)文本列(尤其是非常依赖于语言的内容)。
一般来说,请尝试这样加入月份/年份:

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个字符。请记住,返回的值取决于语言(基于正在运行的作业的系统设置),因此将其用于联接列是一件可怕的事情(这就是为什么我不建议使用月份名称作为联接条件-使用月份编号)

您是打算加入这些结果,还是只是为了展示?@X-Zero我正在加入结果谢谢!由于某些原因,我在使用日期范围运行时不断遇到错误。。代码<代码>SQL0104N在“ange WHERE month>1”之后找到一个意外标记“)”。预期代币可能包括:“)”。SQLSTATE=42601我还将sysibm/sysdummy1更改为sysibm。sysdummy1不必担心
/
分隔符-这只是“系统”与“SQL”的约定(我永远记不清哪个是哪个)。我不知道为什么会出现令牌错误,因为我在我的(DB2)系统上使用了这个确切的语句,没有任何问题-您是否有用于“date\u range”的UDF或其他内容?不,我没有用于date\u range的UDF。我应该这样做吗?我不知道,只是想知道是什么把括号抛出去了。。。好像它不知怎的得到了象征性的计数。。。你能至少做一下标准的CTE(从'UNION ALL'到'>1'删除所有内容)并从中进行选择吗?你应该只得到一行。