Principale utente con più risposte
CALCOLO ANNIVERSARIO

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?
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
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
-
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
-
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...