• User

    Funzione datediff e datepart - Calcolo trimestre

    Ciao a tutti e ben ritrovati,
    sto affrontando un nuovo quesito al quale per ora non ho trovato risposta, né qui sul forum né in rete.

    Dovrei calcolare il trimestre a cui appartiene una data, con le date di riferimento di inizio e fine.
    Il datePart utilizza l'opzione "q" per calcolare il trimestre, ma lo fa relativamente all'intervallo 1 gennaio/31 dicembre.

    Io invece ho in database due date (DataInizio e DataFine) e sulla base di queste vorrei calcolare a quale trimestre appartiene la DataX.

    Avete suggerimenti da darmi?
    Grazie
    Luca


  • Moderatore

    Scusa, giusto per capire...

    Se DataInizio e DataFine sono rispettivamente 01/07/2013 e 30/06/2014, vorresti calcolare a quale trimestre appartiene ad esempio il 12/02/2014, cioé il 3° trimestre di quell'intervallo?


  • User Attivo

    In quel caso potresti estrarti il mese e con uno switch determinare il trimestre


  • User

    Esatto artcava.
    Ho risolto con una soluzione non proprio pulita (magari la ripulisco e ve la posto).
    Considerando il giorno in più dell'anno bisestile, ho calcolato che primo e secondo trimestre hanno 91 giorni.
    Se l'anno è bisestile, terzo e quarto trimestre hanno 92 giorni, altrimenti 91 e 92.
    Fatto questo vedo se gg/mm vengono prima o dopo il 28 febbraio.
    Se prima, controllo che non esista il 29 febbraio. Se è successiva, controllo che non esista il 29 febbraio dell'anno successivo.
    Quindi calcolo i 4 trimestri e inserisco data di inizio e di fine in un array e con un ciclo for controllo a quale intervallo appartiene la data di riferimento.
    Il trimestre corrisponde all'indice dell'array.

    Sto imparando molto su questo forum, non si smette mai 🙂


  • User

    le due date (DataInizio e DataFine), sono sempre il primo giorno di un mese e l'ultimo giorno del mese precedente ma dell'anno successivo (come da esempio di artcava) o possono essere date "durante il mese" (per esempio DataInizio=19/02/2015 e DataFine=18/02/2016)? In tal caso come trimestre devi considerare i mesi solari oppure i tre mesi a partire dalla DataInizio e poi quelli successivi? (quindi per esempio il primo trimestre va dal 19/02 al 19/05, che non fanno parte dello stesso trimestre del calendario)