Mysql
 sql >> Base de données >  >> RDS >> Mysql

Est une date dans certaines périodes

Cette fonction devrait faire ce que vous voulez. Il s'appuie sur MySQL traitant les résultats booléens comme 1 ou 0 dans un contexte numérique, donc le MAX l'appel devient effectivement un OR de toutes les conditions.

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')

Sortie

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

Démo sur dbfiddle