Un altro modo ingegnoso è:
DATEADD(dd, 0, DATEDIFF(dd, 0, [YourDate]))
che ottiene il numero di giorni dal giorno 0 al YourDate e lo aggiunge al GIORNO 0 per impostare di nuovo la linea di base. Questo metodo (o "derivati" del presente documento) può essere utilizzato per una serie di altre manipolazioni di date.
Modifica - altri calcoli di data:
primo giorno del mese:
DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0)
Primo giorno dell'anno:
DATEADD(yy, DATEDIFF(yy, 0, getdate()), 0)
primo giorno del trimestre:
DATEADD(qq, DATEDIFF(qq, 0, getdate()), 0)
Ultimo Da y del mese precedente:
DATEADD(ms, -3, DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0))
Ultimo giorno del mese corrente:
DATEADD(ms, -3, DATEADD(mm, DATEDIFF(m, 0, getdate()) + 1, 0))
Ultimo giorno di anno in corso:
DATEADD(ms, -3, DATEADD(yy, DATEDIFF(yy, 0, getdate()) + 1, 0))
primo Lunedi del mese:
DATEADD(wk, DATEDIFF(wk, 0, DATEADD(dd, 6 - DATEPART(day, getdate()), getdate())), 0)
Modifica: Vero, Joe, non lo aggiunge a GIORNO 0, aggiunge 0 (giorni) al numero di giorni che in pratica lo converte solo in un datetime.
Vedi anche: http://stackoverflow.com/questions/133081/most-efficient-way-in-ms-sql-to-get -date-from-datetime e http://stackoverflow.com/questions/2775/whats-the-best-way-to-remove-the-time-portion-of-a-datetime-value-sql-server – Kristen