Mysql
 sql >> Database >  >> RDS >> Mysql

È una data all'interno di alcuni periodi

Questa funzione dovrebbe fare quello che vuoi. Si basa su MySQL che tratta i risultati booleani come 1 o 0 in un contesto numerico, quindi MAX chiamata diventa effettivamente un OR di tutte le condizioni.

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

Uscita

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

Demo su dbfiddle