2011-10-08 41 views
6

tengo una tabla con dos columnas la primera columna es una fecha y hora (fecha actual) y la otra es una columna datetime (dateReturn).ii necesita para obtener la diferencia entre currentdate y dateReturn a partir del número de días. ¿posible?marca de tiempo y fecha y hora

Respuesta

9

No, esto no es posible.

Contrariamente a la creencia popular (y el nombre en sí), una columna timestampno está realmente relacionada con el tiempo.

Negación: Esta respuesta es específico de SQL Server (de acuerdo con las etiquetas de la cuestión), otros motores de bases de datos podría tener diferentes implementaciones aquí. *

En su lugar, es un número de 64 bits que aumenta constantemente. El valor del número se comparte entre todas las tablas en una única base de datos que tiene dicha columna de marca de tiempo. En otras palabras, si tiene dos de esas tablas, modifique una fila en una, y modifique una fila en la otra, el valor de la marca de tiempo en la primera tabla sería X, y en la segunda tabla sería X + 1.

as per the documentation of timestamp:

Cada base de datos tiene un contador que se incrementa para cada operación de inserción o actualización que se realiza en una tabla que contiene una columna de marca de tiempo dentro de la base de datos. Este contador es la marca de tiempo de la base de datos. Esto rastrea un tiempo relativo dentro de una base de datos, no un tiempo real que pueda asociarse con un reloj.

Como tal, el valor no está relacionado con la fecha y hora reales en que se insertó o se modificó por última vez, y no se puede convertir a esa fecha/hora de ninguna manera.

El único propósito de una columna timestamp es tener algo único, que está garantizado que va en aumento. Dado que el valor es de 64 bits, tendrá acceso a las operaciones 18 446 744 073 709 551 616 que requieren una columna timestamp antes de restablecer el valor. Si tiene una base de datos que puede manejar un millón de tales operaciones cada segundo, aún tendrá que esperar alrededor de 584 554 años antes de que se restablezca el valor, por lo que diría que cumple con los requisitos de exclusividad.

+0

La mayoría de las veces, una columna de marca de tiempo significa una columna con el tipo "fecha y hora" y el nombre "marca de tiempo". Las columnas con tipo "timestmap" son relativamente raras. – Andomar

+4

En este caso, dijo específicamente que una columna era una fecha y la otra una fecha y hora. –

+0

En otras palabras, el nombre 'currentdate', es un poco inapropiado. Si se supone que el campo contiene la fecha y la hora de la última modificación (o inserción inicial), entonces 'timestamp' es el tipo de datos incorrecto, y una columna datetime y un disparador o similar es más apropiado. –

4

El tipo de datos timestamp en el servidor sql no almacena una fecha u hora. Es más una columna de mantenimiento de versión que se actualiza cada vez que se actualiza la fila. Por lo tanto, debe reconsiderar el tipo de datos de esta columna

-1

Si su columna tiene el tipo (relativamente raro) timestamp, la respuesta de Lasse V. Karlsen es correcta.

Si las dos columnas tienen el tipo datetime, puede:

select datediff(day, dateReturn, currentdate) 
from YourTable 

Ver el datediff function.

Cuestiones relacionadas