1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
DROP FUNCTION IF EXISTS BETWEEN_WITHOUT_YEAR;
delimiter //
CREATE FUNCTION BETWEEN_WITHOUT_YEAR (datecourante date, datedebutvalidite char(5), datefinvalidite char(5))
RETURNS INTEGER
DETERMINISTIC
BEGIN
# Variable pour stocker le resultat
DECLARE i_result INTEGER;
# Curseur pour recupere le resultat
DECLARE c_curseur CURSOR FOR
select datecourante
between
case when str_to_date(concat(datedebutvalidite,'-',year(datecourante)),'%d-%m-%Y') < str_to_date(concat(datefinvalidite,'-',year(datecourante)),'%d-%m-%Y') then
case when str_to_date(concat(datedebutvalidite,'-',year(datecourante)),'%d-%m-%Y') <= datecourante then
str_to_date(concat(datedebutvalidite,'-',year(datecourante)),'%d-%m-%Y')
else
str_to_date(concat(datedebutvalidite,'-',year(datecourante)+1),'%d-%m-%Y')
end
else
case when str_to_date(concat(datedebutvalidite,'-',year(datecourante)),'%d-%m-%Y') <= datecourante then
str_to_date(concat(datedebutvalidite,'-',year(datecourante)),'%d-%m-%Y')
else
str_to_date(concat(datedebutvalidite,'-',year(datecourante)-1),'%d-%m-%Y')
end
end
and
case when str_to_date(concat(datedebutvalidite,'-',year(datecourante)),'%d-%m-%Y') < str_to_date(concat(datefinvalidite,'-',year(datecourante)),'%d-%m-%Y') then
case when str_to_date(concat(datedebutvalidite,'-',year(datecourante)),'%d-%m-%Y') <= datecourante then
str_to_date(concat(datefinvalidite,'-',year(datecourante)+1),'%d-%m-%Y')
else
str_to_date(concat(datefinvalidite,'-',year(datecourante)),'%d-%m-%Y')
end
else
case when str_to_date(concat(datedebutvalidite,'-',year(datecourante)),'%d-%m-%Y') <= datecourante then
str_to_date(concat(datefinvalidite,'-',year(datecourante)-1),'%d-%m-%Y')
else
str_to_date(concat(datefinvalidite,'-',year(datecourante)),'%d-%m-%Y')
end
end
;
# Ouvre le curseur et conserve le resultat
OPEN c_curseur;
FETCH c_curseur INTO i_result;
CLOSE c_curseur;
# Retourne le resultat
RETURN i_result;
END
// |