时间戳和日期时间

问题描述:

我有两列的表的第一列是(的currentdate)时间戳,而另一个是(dateReturn)日期时间column.ii需要从days.is这个号码得到的currentdate和dateReturn之间的差可能?时间戳和日期时间

不,这是不可能的。

与流行的观点(和名称本身)相反,timestamp实际上并不涉及时间

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

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

as per the documentation of timestamp

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

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

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

+0

大多数情况下,时间戳列表示类型为“datetime”并且名称为“timestamp”的列。类型为“timestmap”的列相对较少。 – Andomar

+4

在这种情况下,他特别说一列是日期时间,另一列是时间戳。 –

+0

换句话说,名字'currentdate',有点用词不当。如果该字段应该保存最后一次修改(或初始插入)的日期和时间,那么'timestamp'是错误的数据类型,并且日期时间列和触发器或类似更合适。 –

在SQL Server timestamp数据类型不存储日期或时间。它更多的是一个版本维护列,每更新一行就更新一次。所以,你应该重新考虑此列

的数据类型,如果你的列有(比较少见)timestamp型,拉塞五卡尔森的回答是正确的。

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

select datediff(day, dateReturn, currentdate) 
from YourTable 

datediff function