我正在使用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))