Come posso sapere tramite una query in quale giorno cadrà il primo lunedì di uno specifico mese?
Ho fatto diverse ricerche e vari esperimenti ma senza venirne a capo.
Grazie fin d'ora.
Come posso sapere tramite una query in quale giorno cadrà il primo lunedì di uno specifico mese?
Ho fatto diverse ricerche e vari esperimenti ma senza venirne a capo.
Grazie fin d'ora.
Ho trovato questa query
SELECT FROM_DAYS(TO_DAYS(CONCAT('2006-01-01'))+1*7+MOD(2-DAYOFWEEK(CONCAT('2006-01_01')),7))
Ero convinto di aver risolto ma facendo alcune prove mi sono accorto che ha dei bug
es.mettendo '2006-01-01' dovrebbe restituire 2 (il primo lunedì) e invece mi restituisce 9.
A maggio il primo lunedì è 1 e non 8 così come a ottobre è 2 e non 9.
Ho provato per i 12 mesi di quest'anno e quindi ne ha cannato un quarto.
Query più affidabili?
N.B.
La query l'ho scritta giusta ma non so perchè il forum mi mangia l'ultimo trattino (anche usando il tag code) tra mese e giorno e lo rimpiazza con un underscore. Anche lui rema contro.![]()
ti posto un paio di soluzioni. una in php e un'altra con una query.
sono un pelo diverse perche' php conta 0 = domenica, mentre mysql per lo standard ODBC inizia con domenica = 1
codice:SELECT if( (10 - dayofweek('2006-08-01')) <= 7 , 10 - dayofweek('2006-08-01'), 3 - dayofweek('2006-08-01') ) as first_mondayquesta in php serviva a trovare la prima settimana del mese... dal lunedi' alla domenicaCodice PHP:
function FirstWeek($mese, $anno) {
echo $giorno_in = date('w' , mktime (0,0,0, $mese, 1, $anno) );
echo $_lun = (9 - $giorno_in);
if( $_lun > 7 ) { $_lun = $_lun - 7; }
$a = date('d/m/Y', mktime(0,0,0, $mese, $_lun, $anno));
$b = date('d/m/Y', mktime(0,0,0, $mese, $_lun + 6, $anno));
return array($a, $b);
}
$mese = 8;
$anno = 2006;
$res = FirstWeek($mese, $anno);
echo "
Primo Lunedì del mese/anno $mese/$anno è $res[0]
";
echo "I° Settimana del mese $res[0] al $res[1]
";
![]()
Il silenzio è spesso la cosa migliore. Pensa ... è gratis.
visto che vuoi tutta la data...
codice:SELECT concat( if( (10 - dayofweek('2006-08-01')) <= 7 , 10 - dayofweek('2006-08-01'), 3 - dayofweek('2006-08-01') ), '-08-2006') as first_monday
Il silenzio è spesso la cosa migliore. Pensa ... è gratis.
Ciao Piero, speravo proprio in un tuo intervento.![]()
Che bello rincasare e trovare la soluzione ai propri problemi.
Ho fatto un paio di prove al volo e tutto funziona a meraviglia.
Magari domani a mente lucida cerco anche di capire come funzionano sia la soluzione in php che quella in sql.
Ti ringrazio molto, gentilissimo come sempre.![]()
La soluzione in SQL non e' altro che la traduzione della funzione in php.Originariamente inviato da nicola75ss
Magari domani a mente lucida cerco anche di capire come funzionano sia la soluzione in php che quella in sql.
warning: Se non ragionerai "semplice" non capirai il perche' di quei numeri.![]()
![]()
Il silenzio è spesso la cosa migliore. Pensa ... è gratis.
Credo di aver capito il ragionamento che sta dietro lo script e la query.![]()
Ti volevo chiedere una cosa: esiste qualche sito in cui ci sia un archivio di query per problematiche simili? Insomma un buon repository mysql oltre ai commenti del manuale ufficiale.
si credo di si.... nel mio pc. Fatti una tua libreria di script, poi quando ti serve ne inventi uno nuovo. come i chiodi ed i bulloni. Se ne tiene una scatola e poi quando servono si vanno a comprare dal ferramenta.Originariamente inviato da nicola75ss
Credo di aver capito il ragionamento che sta dietro lo script e la query.![]()
Ti volevo chiedere una cosa: esiste qualche sito in cui ci sia un archivio di query per problematiche simili? Insomma un buon repository mysql oltre ai commenti del manuale ufficiale.
Il silenzio è spesso la cosa migliore. Pensa ... è gratis.
Risposta saggia.Originariamente inviato da piero.mac
si credo di si.... nel mio pc. Fatti una tua libreria di script, poi quando ti serve ne inventi uno nuovo. come i chiodi ed i bulloni. Se ne tiene una scatola e poi quando servono si vanno a comprare dal ferramenta.![]()
Grazie.![]()