none
CALCOLO ANNIVERSARIO RRS feed

  • Domanda

  • Potrà sembrare una domanda banale ma purtroppo mi sto arrovellando il cervello da un po'.

    Ho una tabella con delle anagrafiche. Di ogni anagrafica ho la data di nascita di tipo datetime. Voglio semplicemente trovare  tutte le anagrafiche che compiranno gli anni nei 60 giorni successivi ad oggi.

    Come fare? 

    giovedì 1 settembre 2011 10:56

Risposte

  • Ho finalmente risolto da solo con la seguente query.

    SELECT *

    FROM ANAGRAFICA

    WHERE RIGHT(CONVERT(VARCHAR,DATA,112),4) > RIGHT(CONVERT(VARCHAR,NOW(),112),4) AND

    RIGHT(CONVERT(VARCHAR,DATA,112),4) <= RIGHT(CONVERT(VARCHAR,DATEADD(DAY,60,NOW()),112),4)

     

    Se pur non mi sembra il massimo dal punto di vista stilistico, è l'unica soluzione che ho trovato per ora.

    Se qualcuno ha qualche soluzione più bella o più semplice è bene accetta.

    • Contrassegnato come risposta Stefano Fox giovedì 1 settembre 2011 15:54
    giovedì 1 settembre 2011 15:54

Tutte le risposte

  • Quello che vorrei è una cosa simile a questa:

    SELECT *

    FROM ANAGRAFICA

    WHERE DATA BETWEEN NOW() AND DATEADD(DAY,60,NOW())

     

    Il problema di questa soluzione è che non riesco ad escludere l'anno. Quindi se uno è nato prima del 2011 non compare nei risultati della query.

    Il calcolo che dovrebbe essere fatto è lo stesso della query ma invece che su tutta la data deve essere fatto solo sul giorno e sul mese.

    Ma come lo si può fare?

    HELP

    giovedì 1 settembre 2011 15:05
  • Ho finalmente risolto da solo con la seguente query.

    SELECT *

    FROM ANAGRAFICA

    WHERE RIGHT(CONVERT(VARCHAR,DATA,112),4) > RIGHT(CONVERT(VARCHAR,NOW(),112),4) AND

    RIGHT(CONVERT(VARCHAR,DATA,112),4) <= RIGHT(CONVERT(VARCHAR,DATEADD(DAY,60,NOW()),112),4)

     

    Se pur non mi sembra il massimo dal punto di vista stilistico, è l'unica soluzione che ho trovato per ora.

    Se qualcuno ha qualche soluzione più bella o più semplice è bene accetta.

    • Contrassegnato come risposta Stefano Fox giovedì 1 settembre 2011 15:54
    giovedì 1 settembre 2011 15:54
  • prova ad usare la funzione DATEPART per estrarre da una data ciò che vuoi

    http://msdn.microsoft.com/it-it/library/ms174420.aspx

    estrai giorno e mese della data di nascita ma ci metti l'anno corrente e poi fai una bella between

     

    io proverei così

    SELECT *

    FROM ANAGRAFICA

    WHERE CONVERT(Datetime, DATEPART(dd, DATA)+'/'+DATEPART(mm, DATA)+'/'+DATEPART(yyyy, GETDATE(), 105)

    BETWEEN GETDATE() AND DATEADD (dd, 60, GETDATE())

     

    non è bellissima la conversione da varchar a datetime ma dorebbe funzionare...

     

     

     

     

     

    venerdì 2 settembre 2011 10:10