时间戳和日期时间

时间:2011-10-08 17:59:29

标签: sql sql-server

我有一个包含两列的表第一列是(currentdate)时间戳,另一列是(dateReturn)datetime列。需要从天数中得到currentdate和dateReturn之间的差异。这可能吗?< / p>

3 个答案:

答案 0 :(得分:9)

不,这是不可能的。

与流行的信仰(以及名称本身)相反,timestamp实际上与时间无关

免责声明:这个答案特定于Sql Server(根据问题的标签),其他数据库引擎可能在这里有不同的实现。 *

相反,它是一个稳定增加的64位数字。在具有此类时间戳列的单个数据库中的所有表之间共享该数字的值。换句话说,如果您有两个这样的表,修改一行中的行,并修改另一行中的行,第一个表中的时间戳值将为X,而第二个表中的值将为X + 1。 / p>

as per the documentation of timestamp

  

每个数据库都有一个计数器,该计数器针对在包含数据库中的时间戳列的表上执行的每个插入或更新操作递增。此计数器是数据库时间戳。它跟踪数据库中的相对时间,而不是可以与时钟关联的实际时间。

因此,该值与插入或上次修改行的实际日期和/或时间无关,并且无法以任何方式转换为此类日期/时间。

timestamp列的唯一目的是拥有一些独特的东西,保证会增加。由于该值为64位,因此您可以访问18 446 744 073 709 551 616次操作,这些操作在值重置之前需要timestamp列。如果你有一个每秒可以处理一百万个这样的操作的数据库,你仍然需要在值重置之前等待大约584 554年,所以我认为它符合唯一性要求。

答案 1 :(得分:4)

sql server中的timestamp数据类型不存储日期或时间。它更像是一个版本维护列,每次更新行时都会更新。因此,您应该重新考虑此列的数据类型

答案 2 :(得分:-1)

如果你的专栏有(相对罕见的)timestamp类型,Lasse V. Karlsen的回答是正确的。

如果两列都有datetime类型,您可以:

select  datediff(day, dateReturn, currentdate)
from    YourTable

请参阅datediff function