Ciao. Direttamente tramite mysql non so se lo puoi fare. Tempo fa avevo scritto questa funzioncina che magari può tornarti utile.
Inserendo una data e il numero di giorni lavorativi restituisce il giorno in cui cadrà l'ultimo giorno lavorativo. Una volta che hai questa data puoi usarla per la query.
Codice PHP:
function giorniLavorativi($giornoInizio,$meseInizio,$annoInizio,$lavorativi)
{
// Calcolo del giorno di Pasqua fino all'ultimo anno valido
for ($i=2006; $i<=2037; $i++)
{
$pasqua = date("Y-m-d", easter_date($i));
$array_pasqua[] = $pasqua;
}
//var_dump($array_pasqua);
// Calcolo le rispettive pasquette
foreach($array_pasqua as $pasqua)
{
list ($anno,$mese,$giorno) = explode("-",$pasqua);
$pasquetta = mktime (0,0,0,date($mese),date($giorno)+1,date($anno));
$array_pasquetta[] = $pasquetta;
}
// Mi calcolo il timestamp della mia data di partenza
$tsData = mktime(0,0,0,$meseInizio,$giornoInizio,$annoInizio);
// questi giorni son sempre festivi a prescindere dall'anno
$giorniFestivi = array("01-01",
"01-06",
"04-25",
"05-01",
"06-02",
"08-15",
"11-01",
"12-08",
"12-25",
"12-26",
);
$i = 0;
while ($i<$lavorativi)
{
$giorno_data = date("w",$tsData); //verifico il giorno: da 0 (dom) a 6 (sab)
$mese_giorno = date('m-d',$tsData); // confronto con gg sempre festivi
// Infine verifico che il giorno non sia sabato,domenica,festivo fisso o festivo variabile (pasquetta);
if ($giorno_data !=0 && $giorno_data != 6 && !in_array($mese_giorno,$giorniFestivi) && !in_array($tsData,$array_pasquetta) )
{
$i++;
}
$tsData=$tsData+86400;
} //fine while
$tsData=$tsData-86400;
$giorno_conclusivo = date('d-m-Y',$tsData); //converto il timestamp finale nel formato gg-mm-aaaa
return $giorno_conclusivo;
} // fine funzione
// Richiamo la mia funzione passando nell'ordine 4 parametri:
// giorno,mese e anno da cui iniziare il conteggio e il numero di gg lavorativi
echo giorniLavorativi(31,8,2006,5);
// inserendo 31 agosto 2006 e 5 giorni lavorativi mi restituisce 06/09/2006.
Spero ti sia utile.