2009-08-24 12 views
5

¿Cómo evito almacenar la parte de tiempo de datetime en SQL Server, es decir, si tengo un valor de 2011-01-01 00:00:00.000 quiero almacenar solo 2011-01-01?Almacenar la fecha Sólo en SQL Server 2005

Quiero asegurarme de que solo se almacena la parte de la fecha.

Respuesta

7

El tipo de datos DateTime SIEMPRE almacena la fecha Y la hora. Por lo tanto, le queda el uso de CONVERT/CAST para obtener un formato particular, o utiliza los métodos AÑO(), MES() o DAY() para aislar los detalles de la fecha según sus necesidades.

+0

O simplemente puede ignorar la porción de tiempo de la columna y dejarla predeterminada. Solo asegúrate de alimentarlo solo con fechas cuando estés insertando/actualizando valores. –

2

La solución más fácil es simplemente no exponer la porción de tiempo para el usuario. Sin embargo, si realmente necesita asegurarse de que solo se almacena la parte de fecha, puede forzar la porción de tiempo a medianoche/mediodía/cualquier tiempo constante antes de almacenar el valor.

1

El tipo de datos DATETIME incorporado almacena los datos de fecha y hora. Si especifica solo la parte de la fecha, entonces la hora será 12:00:00 o algo así.

Historia divertida: Vi una base de datos una vez donde había una fecha y un campo de tiempo, ambas almacenaban la fecha y la hora, pero cada una se usaba solo para la mitad de los datos. Algunas personas hacen cosas tontas :)

1

Si lanzas un DateTime a un Int y regresas obtendrás un DateTime con 00:00 como parte del tiempo. Para que pueda guardar todas sus fechas como enteros en la base de datos.

+0

Si lanza un 'DateTime' a un' INTEGER', redondeará 'DateTime' a la medianoche más cercana. Necesitas lanzar a 'FLOAT' primero y luego a 'INTEGER'. – Quassnoi

+0

Tienes razón. Debo haber intentado esto (y realicé todas mis pruebas unitarias) antes del mediodía. – idstam

1

añada una columna calculada:

dateonly AS CONVERT(DATETIME, CONVERT(CHAR(8), date_with_time, 112), 112) 

o truncar la fecha correcta en el inserto:

INSERT 
INTO  mytable (dateonly) 
VALUES CONVERT(DATETIME, CONVERT(CHAR(8), GETDATE(), 112), 112) 

, haciendo un CHECK en su columna dateonly para elevar un error cuando alguien intenta insertar una valor no truncado:

CHECK (dateonly = CONVERT(DATETIME, CONVERT(CHAR(8), date_with_time, 112), 112)) 
0

Simplemente represente la fecha como un yyyMMdd valor entero.

Cuestiones relacionadas