我正在使用CASE语句来构建查询以进行某些日期过滤,但是在获得正确的CASE语法后,我无法设法应用WHERE语句。

所以,我想知道如何做?

我的实际代码是:

SELECT id, fecha_inicio,
    CASE WHEN eventos.fecha_fin IS NULL
        THEN DATE_ADD(eventos.fecha_inicio, INTERVAL 45 DAY)
        ELSE fecha_fin
    END as fecha_fin_new
FROM eventos
WHERE DATE_FORMAT(fecha_fin_new, '%Y-%m') >= '2006-01'

最佳答案

WHERE只能与表值一起使用。要处理SELECT别名,您必须使用HAVING

SELECT id, fecha_inicio,
    CASE WHEN eventos.fecha_fin IS NULL
        THEN DATE_ADD(eventos.fecha_inicio, INTERVAL 45 DAY)
        ELSE fecha_fin
    END as fecha_fin_new
FROM eventos
HAVING DATE_FORMAT(fecha_fin_new, '%Y-%m') >= '2006-01'


您也可以将CASE表达式替换为:

IFNULL(fecha_fin, DATE_ADD(eventos.fecha_inicio, INTERVAL 45 DAY))

07-28 07:56