Definire una nuova data

martedì 27 agosto 2013 - 17.37

dompa72 Profilo | Senior Member

Come posso definire una data personalizzata in una variabile data??

Oggi per avere la data il giorno 01 di tre mesi fa scrivo:

Declare @DataOggi as DateTime= DateAdd(MONTH , -3 , GetDate());
Declare @DayOfMonth TinyInt Set @DayOfMonth = 01;
Declare @Month TinyInt Set @Month =Month(@DataOggi);
Declare @Year Integer Set @Year = YEAR(@DataOggi);
Declare @DataDel as Date = DateAdd(day, @DayOfMonth - 1,
DateAdd(month, @Month - 1,
DateAdd(Year, @Year-1900, 0)))

Vorrei evitare la funzione DateAdd ma utilizzare qualcosa tipo New date()
Dimenticavo utilizzo SQLServer 2008 R2

Grazie

alx_81 Profilo | Guru

Ciao

>Vorrei evitare la funzione DateAdd
non esiste un costruttore per i tipi di dato t-sql.
quello che non capisco è cosa vorresti avere. Anche se avessi un New Date, comunque dovresti passare parametri al costruttore e per avere date a tre mesi fa, ad esempio, avresti comunque dovuto "calcolare" rispetto ad oggi. Certo, se sai già i valori di mese, giorno ed anno, puoi usare stringhe inizializzando il tuo datetime come ti serve.. Forse mi sfugge qualcosa?

>Grazie
di nulla!
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

dompa72 Profilo | Senior Member


Declare @DataOggi as DateTime= DateAdd(MONTH , -3 , GetDate());
Declare @DayOfMonth TinyInt = 01;
Declare @Month TinyInt = Month(@DataOggi);
Declare @Year Integer = YEAR(@DataOggi);
Declare @DataDel as Date = DateAdd(day, @DayOfMonth - 1, DateAdd(month, @Month - 1, DateAdd(Year, @Year-1900, 0)));

Delete from mytable where Data < @DataDel;

Come puoi vedere dal codice devo eliminare i record antecedenti al giorno 1 di tre mesi fa (preciso il primo giorno del mese)
Volevo sapere se c'era un modo più elegante e corretto per definire la data iniziale

Ciao e grazie

alx_81 Profilo | Guru

>Come puoi vedere dal codice devo eliminare i record antecedenti
>al giorno 1 di tre mesi fa (preciso il primo giorno del mese)
>Volevo sapere se c'era un modo più elegante e corretto per definire
>la data iniziale
puoi usare un trick con DATEADD/DATEDIFF:
SELECT
CAST(DATEADD(month, DATEDIFF(month, 0, GETDATE())-3, 0) as DATE) as PrimoGiornoTreMesiFa
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

dompa72 Profilo | Senior Member

L'ho provata e sembra funzionare
Ora devo implementarla

Grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5