2010-05-21 10 views

Respuesta

6

La mejor manera es:

SELECT DATEADD(day, DATEDIFF(Day, 0, @ADate), 0) 

Esto se debe a que internamente, SQL Server almacena todas las fechas como dos enteros, de los cuales el primero es el número **** de días *** desde el 1 de enero de 1900. (el segundo es la porción de tiempo, almacenado) como el número de segundos desde Medianoche. (segundos para SmallDateTime s, o milisegundos para DateTime s)
Usar la expresión anterior es mejor porque evita todas las conversiones, leyendo directamente y accediendo a ese primer entero en una representación interna de fechas sin tener que realizar ningún procesamiento ... los dos ceros en la expresión anterior (que representa el 1 de enero de 1900), también se utilizan directamente sin procesamiento o conversión, porque coinciden con la representación interna del servidor SQL de la fecha 1 de enero de 1900 exactamente como se presenta (como un entero) ..

* NOTA. En realidad, la cantidad de límites de fecha (medianoche) que debe cruzar para llegar de una fecha a otra.

+0

Lo descubrí antes de mirar la respuesta, pero esta fue la forma en que fui, y funcionó perfectamente. –

1

Puede utilizar las funciones:

  1. day(date)
  2. month(date)
  3. year(date)
+0

¿Hay funciones similares para la parte de tiempo también? Como hora (fecha), minuto (fecha). Gracias – curiousBoy

5

, mediante el uso de la función convertir. Por ejemplo:

select getdate(), convert(varchar(10),getdate(),120) 

RESULTADOS:

----------------------- ---------- 
2010-05-21 13:43:23.117 2010-05-21 
0
DECLARE @dToday DATETIME 
SET @dToday = CONVERT(nvarchar(20), GETDATE(), 101) 
SELECT @dToday AS Today 

Esto devuelve la fecha de hoy a las 12:00 am: '2010-05-21 00: 00: 00.000' continuación, puede utilizar la variable @dToday en una consulta según sea necesario

Cuestiones relacionadas