6

¿Cuál es la estructura de datos subyacente de los valores de fecha y hora almacenados en SQL Server (2000 y 2005 si es diferente)? Es decir, hasta la representación de bytes?¿Cuál es la representación interna de datetime en el servidor sql?

Presumiblemente, la representación predeterminada que obtiene cuando selecciona una columna de fecha y hora es un valor cultural específico/sujeto a cambios. Es decir, alguna estructura subyacente que no vemos está formateada en YYYY-MM-DD HH: MM: SS.mmm.

Motivo que pido es que haya una opinión general en mi departamento de que está almacenada en la memoria literalmente como AAAA-MM-DD HH: MM: SS.mmm, pero estoy seguro de que este no es el caso.

Respuesta

11

Es stored as an 8 byte field, con un rango de 1753-01-01 a 9999-12-31, con una precisión de 0.00333 segundos.

Los detalles son supuestamente opaco, pero la mayoría de los recursos (1), (2) que he encontrado sobre el estado web lo siguiente:

Los primeros 4 bytes almacenan el número de días transcurridos desde la época de SQL Server (1er Ene 1900) y que los segundos 4 bytes almacenan el número de ticks después de la medianoche, donde un "tic" es de 3,3 milisegundos.

Los primeros cuatro bytes están firmados (pueden ser positivos o negativos), lo que explica por qué se pueden representar fechas anteriores a la época.

+7

Eso no es correcto. Del artículo vinculado: en realidad, SQL Server almacena allí los tic-tac desde la medianoche. Cada tic-reloj equivale a 3.33 milisegundos. Esa es también la razón por la cual el tipo de datos DATETIME tiene una precisión de una centésima de segundo. Esto, nuevamente, está correctamente indicado en BOL. – ctusch

+1

@ctusch, he actualizado la respuesta (¡después de casi 7 años!) Para corregir el tamaño de los "tics". –

+0

Curiosamente, la documentación de SQL Server utiliza el término "precisión". * Debería * decir "precisión". –

Cuestiones relacionadas