Después de investigar con especialistas en este tema, programadores de diversas ramas y maestros dimos con la solución al dilema y la compartimos en este post.
Solución:
La documentación de MSDN para datetime recomienda usar datetime2. Aquí está su recomendación:
Utilizar el
time
,date
,datetime2
y
datetimeoffset
tipos de datos para nuevos trabajos. Estos tipos se alinean con el estándar SQL. Son más portátiles.
time
,datetime2
ydatetimeoffset
proporcionar más segundos de precisión.
datetimeoffset
proporciona soporte de zona horaria para aplicaciones implementadas globalmente.
datetime2 tiene un intervalo de fechas mayor, una precisión fraccionaria predeterminada mayor y una precisión opcional especificada por el usuario. Además, dependiendo de la precisión especificada por el usuario, puede usar menos almacenamiento.
DATETIME2
tiene un intervalo de fechas de “0001/01/01” a “9999/12/31” mientras que el DATETIME
el tipo solo admite el año 1753-9999.
Además, si es necesario, DATETIME2
puede ser más preciso en términos de tiempo; DATETIME está limitado a 3 1/3 milisegundos, mientras que DATETIME2
puede tener una precisión de hasta 100 ns.
Ambos tipos se asignan a System.DateTime
en .NET – no hay diferencia allí.
Si tiene la opción, le recomendaría usar DATETIME2
cuando sea posible. No veo ningún beneficio usando DATETIME
(excepto por la compatibilidad con versiones anteriores): tendrá menos problemas (con fechas fuera de rango y molestias como esa).
Además: si solo necesita la fecha (sin parte de la hora), use FECHA; es tan bueno como DATETIME2
¡y también le ahorra espacio! 🙂 Lo mismo ocurre solo con el tiempo: use TIME
. ¡Para eso están estos tipos!
fechahora2 gana en la mayoría de los aspectos excepto (Compatibilidad con aplicaciones antiguas)
- más grande rango de valores
- mejor Exactitud
- menor Espacio de almacenamiento (si se especifica la precisión opcional especificada por el usuario)
tenga en cuenta los siguientes puntos
- Sintaxis
- fechahora2[(fractional seconds precision=> Look Below Storage Size)]
- Escala de precisión
- 0 a 7 dígitos, con una precisión de 100ns.
- La precisión predeterminada es de 7 dígitos.
- Tamaño de almacenamiento
- 6 bytes para precisión inferior a 3;
- 7 bytes para precisión 3 y 4.
- Toda otra precisión requieren 8 bytes.
- FechaHora2(3) tiene la misma cantidad de dígitos que DateTime pero usa 7 bytes de almacenamiento en lugar de 8 bytes (SQLHINTS- DateTime Vs DateTime2)
- Encuentre más en datetime2 (artículo Transact-SQL MSDN)
fuente de la imagen: Kit de capacitación a su propio ritmo de MCTS (Examen 70-432): Microsoft® SQL Server® 2008 – Implementación y mantenimiento Capítulo 3: Tablas -> Lección 1: Creación de tablas -> página 66