CASE WHEN 在 SQL 中与 CONCAT

CASE WHEN in SQL with CONCAT

我需要在 table 中创建一个额外的列,其中“SummerSeasonYYYY”的字段“WinterSeasonYYYY”是该记录的年份 YYYY。 这意味着如果日期是 01-01-2021 它将被视为 WinterSeason2020,三月和八月之间将是当年的 SummerSeason(01-07-2021 将是 SummerSeason2021),八月之后将是冬季 (01-09-2021 将是 WinterSeason2021)

到目前为止,我一直在尝试通过 CASE-WHEN 对此进行评估:

SELECT *, 
CASE
WHEN MONTH(date) < 3 THEN
        extracted_year = EXTRACT(YEAR FROM (date)-1)
        CONCAT('WinterSeason',extracted_year);
WHEN MONTH(DATA_VENDA) BETWEEN 3 AND 8
        SET extracted_year = year(date)
        CONCAT('SummerSeason',extracted_year);
ELSE 
        SET extracted_year = year(date)
        CONCAT('WinterSeason',extracted_year);
END CASE AS SEASON
FROM CAMPANHAS;

有什么问题吗?我该如何解决?

您的想法是正确的,但正在努力使其变得比实际更难,这应该可以解决问题:

SELECT *, 
CASE WHEN MONTH(date) BETWEEN 1 AND 2 THEN CONCAT('WinterSeason',YEAR(date)-1)
    WHEN MONTH(date) BETWEEN 3 AND 8 THEN CONCAT('SummerSeason',YEAR(date))
    ELSE CONCAT('WinterSeason',YEAR(date)) 
END AS SEASON
FROM CAMPANHAS

一种方法是减去两个月计算一年:

SELECT c.*,
       CONCAT(CASE WHEN MONTH(date) BETWEEN 3 AND 8
                   THEN 'SummerSeason' ELSE 'WinterSeason'
              END,
              YEAR(date - INTERVAL 2 MONTH)
             ) as season
FROM CAMPANHAS c;