2012-03-29 7 views
6

Ho il seguente pezzo di SQL:SQL datetime ha bisogno di leggere 00: 00: 00.000

select DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)) 

che viene attraverso come questo formato:

2012-02-29 23:59:59.000 

Ho bisogno il pezzo esatto di codice con la data uguale, tuttavia la parte del tempo deve essere 00:00: 00.000

Modifica * Avrei dovuto essere chiaro qui: ho bisogno di avere l'ultimo giorno del mese precedente in qualsiasi momento (con il tempo in 00: 00: 00.000 formato ovviamente)

+0

possibile duplicato di [Piano una data in SQL Server] (http://stackoverflow.com/questions/85373/floor-a-date-in-sql-server) – Hogan

+0

'SELEZIONA CAST (s COME DATA) 'o' SELEZIONA CAST (CAST (s As Date) As DateTime) '? – Seph

risposta

5
select dateadd(d,datediff(d,0,dateadd(s,-1,dateadd(m,datediff(m,0,getdate()),0))),0) 
3
SELECT DATEADD(MONTH, -1, DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE()))) 
+0

La query dell'OP fornisce l'ultimo giorno/secondo del mese precedente. La tua query dà il primo secondo di oggi. – StuartLC

+2

Questo non funzionerà, poiché sta sottraendo un mese dal mese corrente. –

+0

SELECT DATEADD (MONTH, -1, DATEADD (DAY, 0, DATEDIFF (DAY, 0, GETDATE()))) –

2

Un metodo alternativo per togliere la parte di tempo è di cast a un galleggiante, applicare la funzione Floor e gettato di nuovo ad un datetime.

select Cast(Floor(Cast(DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)) as float)) as datetime) 
3

Questo vi darà l'ultimo secondo del mese precedente

select dateadd(s,-1,dateadd(month,datediff(month,0,GETDATE()),0)); 

e questo vi darà l'ultimo giorno del mese precedente

select dateadd(day,-1,dateadd(month,datediff(month,0,GETDATE()),0)); 

Maggiori dettagli su come fare ciò:

select dateadd(day,datediff(day,0,@datetime),0); 

o

select dateadd(day,datediff(day,0,GETDATE()),0); 

In inglese: prendere il numero di giorni tra questa data e il 0 e aggiungere quei giorni a 0.

Questo funziona con qualsiasi parametro per datediff. So

select dateadd(month,datediff(month,0,GETDATE()),0); 

"Rimuove" tutte le informazioni del giorno oltre alle informazioni sull'ora.

0
SELECT DATEADD(DAY, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)) 

In SQL Server 2012 è possibile utilizzare eomonth.

SELECT EOMONTH(DATEADD(MONTH, -1, GETDATE())) 
+0

Ho provato la data che hai suggerito nel tuo commento. Ha dato l'output corretto? –

+2

@DarrenDavies - Controlla questo e osserva le differenze delle date tra le nostre risposte e la query fornita nella domanda. [Fine del mese] (http://data.stackexchange.com/stackoverflow/query/65491/end-of-month) –

+0

Vedo! Grazie per la segnalazione :) –

Problemi correlati