Во-первых, я не рекомендую присоединяться к (отформатированному) текстовому столбцу, как этот (особенно к тому, что сильно зависит от языка).
Как правило, попробуйте присоединиться к месяцу / годам следующим образом:
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'
Существует также MONTHNAME()
функция в DB2, которая будет возвращать (длинное) имя месяца.Генерирует эти результаты:
December
November
October
September
August
July
June
May
April
March
February
January
... Который вы могли бы подстрокой получить первые 3 символа.Имейте в виду, что возвращаемое значение зависит от языка (в зависимости от системных настроек запущенного задания), поэтому использовать его для столбца соединения ужасно (поэтому я не рекомендую использовать месяц-имя как условие соединения - использовать номер месяца).