Определите сезоны на уровне месяца / дня в SQL - PullRequest
0 голосов
/ 24 апреля 2020

Мне нужно сгруппировать даты по сезонам, но на уровне DAY-MONTH, как показано ниже:

IFF(DATE BETWEEN 21.03 AND 21.06 THEN SPRING 
    22.06-22.09 = SUMMER
    23.09-21.12 = AUTUMN
    22.12-20.03 = WINTER)

Я пробовал объединение и between, но с этим не повезло.

Ответы [ 3 ]

1 голос
/ 24 апреля 2020
Функция

IFF допускает одно условие. Вместо этого используйте CASE .

Например:

CASE 
        WHEN to_varchar(DATE,'DDMM') between '2103' and '2006' then 'SPRING'
        WHEN to_varchar(DATE,'DDMM') between '2106' and '2209' then 'SUMMER'
        WHEN to_varchar(DATE,'DDMM') between '2309' and '2012' then 'AUTUMN'
        ELSE                                                        'WINTER' 
END
1 голос
/ 24 апреля 2020

Используйте case. Используйте строки. И используйте правильные форматы даты:

(CASE WHEN to_char(DATE, 'MMDD') between '0321' and '0621' then 'SPRING'
      WHEN to_char(DATE, 'MMDD') between '0622' and '0922' then 'SUMMER'
      WHEN to_char(DATE, 'MMDD') between '0923' and '1220' then 'AUTUMN'
      ELSE 'WINTER' 
 END)
0 голосов
/ 24 апреля 2020

Попробуйте что-то вроде ниже

CASE WHEN TO_VARCHAR(date_c,'DD-MM') BETWEEN '21-03' AND '21-06' THEN 'SPRING' END
...