2012-03-29 27 views
6

tengo el siguiente fragmento de SQL:SQL fecha y hora tiene que leer 00: 00: 00.000

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

que viene a través ya que este formato:

2012-02-29 23:59:59.000 

necesito la pieza exacta de código con la fecha es la misma, sin embargo, la parte del tiempo debe leer 00: 00: 00.000

Modificar * Debería haber sido claro aquí: Necesito tener el último día del mes anterior en un momento dado (con el tiempo en 00: Formato 00: 00.000 por supuesto)

+0

posible duplicado de [Planta una fecha en el servidor SQL] (http://stackoverflow.com/questions/85373/floor-a-date-in-sql-server) – Hogan

+0

'SELECT CAST (s COMO FECHA) 'o' SELECT CAST (CAST (s como fecha) como DateTime) '? – Seph

Respuesta

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 consulta de OP indica el último día/segundo del mes anterior. Su consulta da el 1er segundo de hoy. – StuartLC

+2

Esto no funcionará, ya que está restando un mes del mes actual. –

+0

SELECCIONAR DATEADD (MES, -1, DATEADD (DÍA, 0, DATEDIFF (DÍA, 0, GETDATE()))) –

2

Un método alternativo para despojar a la porción de tiempo es para su emisión a un flotador, aplicar la función Floor y emitir de nuevo a una fecha y hora.

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

Esto le dará el último segundo del mes anterior

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

y esto le dará el último día del mes anterior

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

Más detalles de cómo hacer esto:

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

o

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

En Inglés: Tome el número de días entre esta fecha y 0 y añadir esos días a 0.

Esto funciona con cualquier parámetro para datediff. Por lo tanto,

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

"Eliminará" la información de todo el día además de la información de tiempo.

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

En SQL Server 2012 puede usar eomonth.

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

Probé la fecha que sugirió en su comentario. Dio la salida correcta? –

+2

@DarrenDavies - Verifique esto y observe las diferencias de las fechas entre nuestras respuestas y la consulta proporcionada en la pregunta. [Fin de mes] (http://data.stackexchange.com/stackoverflow/query/65491/end-of-month) –

+0

¡Ya veo! Gracias por señalar eso :) –

Cuestiones relacionadas