DELETE from Table WHERE Date > GETDATE();
GETDATE() incluye el tiempo. En lugar de obtener¿Cómo obtengo solo la fecha cuando uso MSSQL GetDate()?
2011-01-26 14:58:21.637
¿Cómo puedo obtener:
2011-01-26 00:00:00.000
DELETE from Table WHERE Date > GETDATE();
GETDATE() incluye el tiempo. En lugar de obtener¿Cómo obtengo solo la fecha cuando uso MSSQL GetDate()?
2011-01-26 14:58:21.637
¿Cómo puedo obtener:
2011-01-26 00:00:00.000
sesgo leve a SQL Server
Resumen
DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
SQL Server 2008 tiene date
tipo embargo. Así que sólo tiene que utilizar
CAST(GETDATE() AS DATE)
Editar: Para añadir un día, comparar con el día anterior a "cero"
DATEADD(day, DATEDIFF(day, -1, GETDATE()), 0)
De cyberkiwi:
Una alternativa que no implique 2 funciones es (la +1 puede estar dentro o entre los corchetes).
DATEDIFF(DAY, 0, GETDATE() +1)
DateDiff
devuelve un número, pero a todos los efectos que esto funcionará como una fecha donde quiera que vaya a utilizar esta expresión, a excepción de su conversión a VARCHAR directamente - en cuyo caso se habría utilizado el enfoque convertir directamente en GETDATE (), p.ej
convert(varchar, GETDATE() +1, 102)
¿Cómo agrego un día a este valor? – sooprise
select CAST (GETDATE() + 1 AS DATE) – eidgenossen
@eidgenossen: Simple, pero se basa en una conversión implícita. Menos claro. – gbn
SELECT CONVERT(DATETIME, CONVERT(varchar(10), GETDATE(), 101))
¿Para qué sirve el 101? – sooprise
Determina el formato de la cadena de salida, en este caso mm/dd/aaaa hh: mm: ss. De ahí el varchar (10) que trunca la porción de tiempo. – JohnOpincar
Es base de datos específica. No ha especificado qué motor de base de datos está utilizando.
p. Ej. en PostgreSQL haces cast (myvalue como date).
¿Quieres decir GETDATE() no es suficiente una pista? – RichardTheKiwi
Creo que el OP dijo "MSSQL" –
CONVERT(varchar,GETDATE(),102)
¿Para qué sirve el 102? – sooprise
Los 101, 102, etc. son solo parámetros para la función CONVERT. Creo que en realidad podría querer usar 101, que es en forma de mm/dd/aaaa, mientras que 102 está en la forma mm.dd.aaaa, creo ... – Saggio
Eso devuelve una cadena. En lugar de confiar en la conversión implícita, es mejor lanzarla a una fecha explícitamente. – Leigh
Aquí tienes algunas soluciones;)
http://www.bennadel.com/blog/122-Getting-Only-the-Date-Part-of-a-Date-Time-Stamp-in-SQL-Server.htm
Lo sentimos, pero ese enlace está incompleto: no tiene en cuenta la técnica dateadd/datediff – gbn
Para SQL Server 2008, el mejor y el índice de forma amigable es
DELETE from Table WHERE Date > CAST(GETDATE() as DATE);
Para versiones anteriores de SQL Server, las matemáticas fecha funcionarán más rápido que un convertido a VARCHAR. Incluso la conversión a varchar puede darle un resultado incorrecto, debido a la configuración regional.
DELETE from Table WHERE Date > DATEDIFF(d, 0, GETDATE());
Nota: no es necesario para envolver el DATEDIFF
con otro DATEADD
El estilo "anterior" sin DATEADD se basa en la conversión implícita de int a la fecha según [precedence] (http://msdn.microsoft.com/en-us/library/ms190309.aspx). Esto es efectivamente DATEADD en la práctica, ¿no? Prefiero conversiones explícitas, aunque esto se vea más limpio. – gbn
No estoy seguro de cómo lo hace QO, pero no hay ninguna razón para solicitar manualmente un DATEADD. Aunque el tipo de datos es datetime, 'internamente' cuando se compara, se convierte en un valor numérico, por lo que puede ser mejor dejarlo solo como un int. – RichardTheKiwi
Usted puede utilizar
DELETE from Table WHERE Date > CONVERT(VARCHAR, GETDATE(), 101);
Eso devuelve una cadena. Lo mejor es no confiar en la conversión implícita. En lugar de eso, transfiéralo a una fecha o fecha/hora explícitamente. – Leigh
Además, tenga en cuenta que es posible que desee '> =' en lugar de '>' , o realmente se perderá la eliminación de registros que son exactamente 2011-01-26 00: 00: 00.000 ... –
Buena llamada, de hecho cambié eso antes de leer este comentario :) – sooprise
Una solución simple be 'cast (left (getdate(), 11) como datetime)' –