时间戳和日期时间

6

我有一张包含两列的表,第一列是(currentdate)时间戳,另一列是(dateReturn)日期时间列。 我需要计算当前日期和dateReturn日期之间的天数差异。这是否可能?

3个回答

9
不,这是不可能的。
与其名字所暗示的相反,timestamp列实际上与时间无关。
免责声明:此答案仅适用于Sql Server(根据问题的标签),其他数据库引擎可能在此处有不同的实现。
它是一个稳定增长的64位数字。该数字的值在具有此类时间戳列的单个数据库中的所有表之间共享。换句话说,如果您有两个这样的表,在其中一个表中修改一行,在另一个表中修改一行,则第一个表中时间戳的值将为X,而第二个表中的值将为X + 1。
根据时间戳文档
每个数据库都有一个计数器,该计数器会针对包含数据库中时间戳列的表执行的每个插入或更新操作进行递增。这个计数器是数据库时间戳。这跟踪数据库内的相对时间,而不是可以与时钟相关联的实际时间。
因此,该值与行插入或最后修改的实际日期和/或时间无关,并且不能以任何方式转换为此类日期/时间。
时间戳列的唯一目的是拥有某些独特的东西,保证不断增加。由于该值是64位的,您将可以访问18446744073709551616个操作,这需要在值重置之前使用时间戳列。如果您的数据库每秒可以处理100万个此类操作,则仍需等待约584554年才能重置该值,因此我认为它满足唯一性要求。

大多数情况下,时间戳列意味着类型为“datetime”且名称为“timestamp”的列。类型为“timestamp”的列相对较少。 - Andomar
4
在这种情况下,他明确指出其中一列是日期时间,另一列是时间戳。 - Lasse V. Karlsen
换句话说,名为“currentdate”的字段有点用词不当。如果该字段应该保存最后修改(或初始插入)的日期和时间,则“时间戳”是错误的数据类型,应该使用日期时间列和触发器或类似的功能。 - Lasse V. Karlsen
在MySQL中,时间戳确实存储了实际的日期时间。它以UTC格式存储日期时间。在SQL中,这是完全不同的事情,正如答案所说的那样:http://dev.mysql.com/doc/refman/5.0/en/timestamp.html。 - TheTechGuy
然而标签却显示为sql-server。 - Lasse V. Karlsen

4

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


-1
如果你的列有(相对罕见的)timestamp 类型,Lasse V. Karlsen 的回答是正确的。
如果两个列都是 datetime 类型,则可以:
select  datediff(day, dateReturn, currentdate)
from    YourTable

请查看datediff函数


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接