Для MySQL 8 можно, но запрос страшненький
WITH RECURSIVE `cte` AS (
(SELECT `id`, `locationid`, `eventid`,
TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(`list`, ','), ',', 1), ',', -1)) AS `date`,
1 AS `idx`
FROM `test`
HAVING `date` != '')
UNION
(SELECT `t`.`id`, `t`.`locationid`, `t`.`eventid`,
TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(`t`.`list`, ','), ',', `cte`.`idx` + 1), ',', -1)) AS `date`,
`cte`.`idx` + 1
FROM `cte`
JOIN `test` AS `t` ON `t`.`id` = `cte`.`id`
HAVING `date` != '')
),
SELECT `id`, `locationid`, `eventid`,
CONCAT (SUBSTRING(`date`, 7, 4), '-', SUBSTRING(`date`, 4, 2), '-', SUBSTRING(`date`, 1, 2)) AS `date`
FROM `cte`
HAVING `date` >= :firstDate AND `date` < :lastDate
Лучше один раз потратить время и нормализовать таблицу.