2011-07-11 24 views
9

Al almacenar un valor de fecha y hora en el servidor sql 2008, utilizando el tipo de fecha y hora, ¿en qué formato almacenará el valor?Al almacenar una fecha y hora en el servidor sql (tipo de fecha y hora), ¿en qué formato lo almacena?

¿Es la cantidad de segundos desde 1970 (o lo que sea)?

En el lado de la aplicación (.net), estoy pasando un objeto datetime.

Cuando veo las filas de la tabla en el analizador de consultas, ¿se formateará según mi configuración cultural o estoy viendo exactamente lo que está almacenado en el archivo db?

+0

No es una respuesta pero una punta general. Emitir como binario ayudará a diagnosticar curiosidades como esta y otras (unicode).seleccionar elenco (getdate() como binario); –

Respuesta

13

Internamente, de acuerdo con SQLDenis, se almacenan como dos enteros
http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/how-are-dates-stored-in-sql-server

cuando los ve en el analizador de consultas que están viendo los números evaluados.

Es no almacenado como "Tiempo Unix"
http://en.wikipedia.org/wiki/Unix_time

+0

+1 Siempre he se preguntó si eran puntos flotantes, para qué se usaba el exponente y si la precisión disminuiría aún más en el futuro :) Gracias por aclarar eso. – Andomar

+0

Correcto, me alegro de que la publicación que escribí pueda ayudar a alguien :-) – SQLMenace

+0

@SQLMenace ¿tiene una notificación cuando llegan las referencias SO o simplemente leyó esta pregunta? : D – Matthew

6

Se almacena como un punto flotante que representa días desde el 1 de enero de 1900. Si redondea hacia abajo echándola por un int, que deja sólo la parte de fecha:

select cast(cast(getdate() as int) as datetime) 
--> 
2011-07-12 00:00:00.000 

O si se agrega una serie para eso, eso es agregar un número de días. Por ejemplo, la adición de 0,5 es equivalente a la adición de 12 horas:

select getdate() + 0.5 
--> 
2011-07-12 11:22:09.927 

ver este MSDN article para más detalles.

Fecha y hora no incluye información de formato; El analizador de consultas puede mostrarlo de la forma que quiera. Probablemente tratará de respetar la configuración regional de su PC cliente.

+2

+1 Pueden tratarse como puntos flotantes y manipularse en SQL como si lo fueran, pero cuando se escriben en el disco son entradas. – Matthew

+0

Se almacenan como 2 entradas, consulte mi publicación aquí http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/how-are-dates-stored-in-sql-server – SQLMenace

-1
DateTime doj = new DateTime(); 

System.Globalization.CultureInfo c1=new System.Globalization.CultureInfo("en-GB",true); 
doj = DateTime.Parse(Txtdoj.Text.Trim(), c1, System.Globalization.DateTimeStyles.NoCurrentDateDefault); 

uso ..es

consulta utilización para mostrar la fecha y hora select convert (varchar (max), doj, 103) como doj desde tbl_registration

-1

Aquí está el código para ver cómo se almacena:

DECLARE @now datetime, @bytenow binary(8) 
SELECT @now = getdate() 
SELECT @bytenow = convert(binary(8), @now) 
SELECT @now AS fulldate, @bytenow AS internal, 
     convert(int, substring(@bytenow, 1, 4)) AS days, 
     convert(int, substring(@bytenow, 5, 8)) AS ticks 

Esto muestra los 2 valores:

  1. los primeros 4 bytes es un número que representa días desde 1-1-1900
  2. los segundos 4 bytes es el número de garrapatas desde la medianoche donde uno segundo tiene 300 tics.

.

fulldate    internal   days  ticks 
----------------------- ------------------ ----------- ----------- 
2016-11-07 10:54:13.080 0x0000A6B700B3AFB4 42679  11775924 

Referencia: Solving the Datetime Mystery ver figura 3

+0

Entonces, ¿por qué votar abajo? –

Cuestiones relacionadas