2009-11-11 13 views
13

¿Cuál es el equivalente a:Tronco (sysdate) en SQL Server

TRUNC(SYSDATE) 

... en SQL Server 2005?

+3

30 preguntas, no hay respuestas ¿aceptado? ¿Por qué molestarse? – RRUZ

+2

La pregunta es legítima: el OP quiere el equivalente de la funcionalidad ORACLE. –

+0

Gracias, Dominic :) –

Respuesta

17

Recomendado:

DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) 

Esta es otra alternativa, pero es arriesgado, debido a la fundición a un flotador. También se ha demostrado que no escala el rendimiento así como el enfoque DATEADD/DATEDIFF.

CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME) 
+5

Tengo que hacer todo eso solo para obtener TRUNC()? –

+0

Esto funciona, pero sería más correcto cambiar los argumentos segundo y tercero de DATEADD. El segundo argumento es el incremento, por lo que agrega 0 a los días devueltos por DATEDIFF. – djs

1

Otra opción es utilizar CONVERT (MSSQL 2008 y posteriores) y, o bien utilizar un estilo apropiado o usar un estilo que luego se puede SUBSECUENCIA. Sin embargo, no tengo idea sobre el rendimiento en comparación con la solución dateadd/datediff.

p. Ej.

SELECT SUBSTRING(CONVERT(nvarchar(30), GETDATE(), 120), 1, 16)

Devuelve:

2012-01-03 15:30

Ejemplo utilizando el grupo que enumera las filas creadas por minuto (presupone una columna 'creado' de fecha y hora):

SELECT SUBSTRING(CONVERT(nvarchar(30), created, 120), 1, 16) as [minute] 
, COUNT(1) as [per min] 
FROM foo 
GROUP BY SUBSTRING(CONVERT(nvarchar(30), created, 120), 1, 16) 
+2

Si está en SQL Server 2008 o posterior, simplemente use CONVERT (date, getdate()). El tipo de datos 'Fecha' no almacena información de tiempo. – Baodad