2011-08-05 3 views
0

DB2에서 이러한 데이터를 어떻게 나열합니까?모두 MMM-YYYY 연도 조합

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

맨 처음 MM-YYYY 조합은 항상 '12월'+이다 '-'+ CHAR (현재 연도 - 1)

+0

이러한 결과에 참여할 계획입니까 아니면 디스플레이 용입니까? –

+0

@ X-Zero 결과에 합류했습니다 – Connection

답변

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 

... 처음 세 문자를 가져 오기 위해 어느 부분 문자열을 사용할 수 있습니까? 반환 된 값은 언어에 따라 달라집니다. (실행중인 작업의 시스템 설정에 따라)입니다. 따라서 조인 열에 사용하는 것은 끔찍한 일입니다. 따라서 월 이름을 사용하지 않는 것이 좋습니다. 가입 조건 - 달 번호 사용).

+0

감사합니다! 웬일인지 WITH date_range .. 코드를 실행할 때 오류가 계속 발생합니다. SQL0104N 예기치 않은 토큰 ")"이 "ange WHERE month> 1"다음에 발견되었습니다. 예상 토큰은 다음을 포함 할 수 있습니다 : ")". SQLSTATE = 42601' 또한 sysibm/sysdummy1을 sysibm.sysdummy1로 바 꾸었습니다. – Connection

+0

'.' 대'/'구분 기호에 대해 걱정하지 마십시오. 이것은 '시스템'대 'SQL'규칙입니다.). (DB2) 시스템에서 문제가없는 정확한 진술을 사용했기 때문에 왜 토큰 오류가 발생하는지 알지 못합니다. 'date_range'또는 뭔가에 대한 UDF가 있습니까? –

+0

아니요, date_range에 대한 UDF가 없습니다. 내가해야하니? – Connection