sqlserver中日期时间和时间戳之间的区别? [复制]

Posted

技术标签:

【中文标题】sqlserver中日期时间和时间戳之间的区别? [复制]【英文标题】:Difference between datetime and timestamp in sqlserver? [duplicate] 【发布时间】:2011-10-29 14:59:42 【问题描述】:

TimestampDatetime SQL Server 有什么区别?

我认为这两种格式都能够存储日期+时间。那么,它们的区别在哪里呢?

Timestamp 无法存储日期、时间信息。

还有什么区别?

【问题讨论】:

两种格式都能够存储日期和时间。 TIMESTAMP 让人们这么认为,但实际上这只是微软某人的一个非常糟糕的命名决定(直到为时已晚,没有人会费心检查 SQL 标准)。 @AaronBertrand 日期时间列值在 SQL 服务器中存储类似于 2016-06-05 04:38:56.157 的值。它不是日期和时间值吗?时间戳我同意,因为它显示了一个像 0x00000000000007D9 这样的十六进制值,只要我在行中进行任何更新,它就会简单地增加 1。那你为什么说这两种格式都不能存储日期和时间。 @RBT 好的。我发表的评论(5 年前!)并不意味着二进制值不可能存储日期/时间信息。但是,恰好使用二进制格式的 TIMESTAMP / ROWVERSION 列不会在那里存储任何日期或时间信息。我们不要挑毛病,好吗? 哦。好的。我的印象是您对@aaronBertrand 这两种数据类型都做了一个概括性的陈述。我唯一关心的是可以实际存储日期和时间的日期时间数据类型。我今天只是在搜索 timeStamp 数据类型时才看到你的评论。干杯哥们! 【参考方案1】:

根据the documentation,timestamprowversion 的同义词 - 它是自动生成的并且保证1是唯一的。 datetime 不是 - 它只是一种处理日期和时间的数据类型,并且可以在插入等时由客户端指定。


1 当然,假设您正确使用它。见 cmets。

【讨论】:

有趣的是,MSDN 指出,可以通过使用 SELECT INTO 将 rowversion 欺骗为非唯一 - 尽管他们指出这是一个坏主意。如果您正确使用它(即让数据库管理 rowversion 值),那么它将始终是唯一的并且单调递增 - 这非常方便。 @JonSkeet DB 的(从未有时间戳/行版本列)值似乎有点问题。 ***.com/questions/13682498/… @HogRider: timestamp 在哪个数据库系统上?根据这个答案,它只是 SQL Server 上的一个行版本,实际上与时间无关。但是在它基于时间的系统上,它将是数据库服务器的时钟。 @HogRider:数据库服务器是托管数据库的计算机——通常其他计算机(客户端)与数据库服务器通信。听起来您应该先了解更多关于数据库的基础知识,然后再关注时间戳等细节...... @MitchWheat 值得一提的是,这个问题更明确,标签更好,并且是您回答的问题的 10 倍。 Jon Skeet 在 11 分钟内回答了这个问题,这可能是在它被标记为重复之前,但我在 2011 年没有参加 SO,所以我不能确定。编辑:2年后它被标记为重复。 :|【参考方案2】:

日期时间是一种数据类型。

Timestamp 是一种用于行版本控制的方法。事实上,在 sql server 2008 中,此列类型已重命名(即不推荐使用时间戳)为 rowversion。它基本上意味着每改变一行,这个值就会增加。这是通过数据库计数器完成的,该计数器会随着每个插入或更新的行自动增加。

更多信息:

http://www.sqlteam.com/article/timestamps-vs-datetime-data-types

http://msdn.microsoft.com/en-us/library/ms182776.aspx

【讨论】:

在同一事务中更新的两个不同行具有相同的行版本。 ???同一行已更新 teice ,因此计数器应更改两次..否? @andreas 在您更正关于两行可以具有相同行版本但不正确的声明后,我将投票赞成

以上是关于sqlserver中日期时间和时间戳之间的区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Hivesql计算两个时间戳相差的分钟数

SqlServer时间戳

熊猫日期时间和日期时间日期时间之间的区别

无法在 django 中减去日期时间和时间戳?

SQLServer时间戳转日期格式(13位时间戳)

unix_timestamp 和强制转换为时间戳之间的区别