Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922

    [Mysql] ricavare data primo lunedì del mese

    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.

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    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.

  3. #3
    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_monday
    Codice PHP:

    function FirstWeek($mese$anno)  {

         echo 
    $giorno_in date('w' mktime (0,0,0$mese1$anno) );

         echo 
    $_lun = ($giorno_in);

         if( 
    $_lun ) {  $_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] 
    "

    questa in php serviva a trovare la prima settimana del mese... dal lunedi' alla domenica


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    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.

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    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.

  6. #6
    Originariamente inviato da nicola75ss
    Magari domani a mente lucida cerco anche di capire come funzionano sia la soluzione in php che quella in sql.
    La soluzione in SQL non e' altro che la traduzione della funzione in php.

    warning: Se non ragionerai "semplice" non capirai il perche' di quei numeri.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    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.

  8. #8
    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.
    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.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    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.
    Risposta saggia.
    Grazie.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.