Следующий mySQL-запрос всегда возвращает 0 результатов. Проблема началась, когда я добавил часть, использующую функции concat и cast. Вы видите синтаксическую ошибку?
SELECT p.seccio_id as seccio,
count(distinct r.usuari_upc) as usuaris,
sum(r.preu) as preu
FROM report r, persona p
WHERE r.usuari_upc = p.persona_id
and ((r.any = 2017 and r.mes = 1)
or (r.any > 2017 and r.any < 2018)
or (r.any = 2018 and r.mes = 1)
or (2017 != 2018
and ((r.any = 2017 and r.mes > 1)
or (r.any = 2018 and r.mes < 1))))
and (p.any_id = '2017-2018'
or p.any_id = '2016-2017')
/* The problem is here. */
and ((r.mes < 9
and p.any_id = CONCAT(CAST(r.any - 1 as varchar(4)),"-",CAST(r.any as varchar(4))))
or (r.mes >= 9 and p.any_id = CONCAT(CAST(r.any as varchar(4)),"-",CAST(r.any + 1 as varchar(4)))))
GROUP BY p.seccio_id
ORDER BY p.seccio_id
Вы не можете отличать прямо от числовых значений до varchar (4) - если вы измените их все на char (4), вы потеряете синтаксические ошибки.