sql >> Base de Datos >  >> RDS >> Mysql

Es una fecha dentro de algunos de los períodos

Esta función debería hacer lo que quieras. Se basa en que MySQL trata los resultados booleanos como 1 o 0 en un contexto numérico, por lo que MAX la llamada se convierte efectivamente en OR de todas las condiciones.

CREATE FUNCTION check_activity(project_id INT, check_date DATE)
RETURNS BOOLEAN
DETERMINISTIC
BEGIN
  RETURN (SELECT MAX(check_date BETWEEN ActiveFrom AND ActiveTo) FROM projects WHERE ProjId = project_id);
END
SELECT check_activity(20, '2018-01-10'), check_activity(20, '2018-02-01')

Salida

check_activity(20, '2018-01-10')    check_activity(20, '2018-02-01')
1                                   0

Demostración en dbfiddle