Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

É uma data dentro de alguns dos períodos


Esta função deve fazer o que você deseja. Ele se baseia no MySQL tratando os resultados booleanos como 1 ou 0 em um contexto numérico, portanto, o MAX chamada efetivamente se torna um OR de todas as condições.
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')

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

Demonstração no dbfiddle