【发布时间】:2014-06-17 14:41:17
【问题描述】:
在我的数据库中,我在每个表中都使用了Timestamp 来查看插入数据的时间。
它以8字节的byte[]存储数据。
现在我想用 C# 读取那个时间。
如何从Timestamp 得到DateTime 对象,即byte[]?
【问题讨论】:
-
您对该数据类型存在根本性的误解。这不是日期或时间。
标签: c# sql-server
在我的数据库中,我在每个表中都使用了Timestamp 来查看插入数据的时间。
它以8字节的byte[]存储数据。
现在我想用 C# 读取那个时间。
如何从Timestamp 得到DateTime 对象,即byte[]?
【问题讨论】:
标签: c# sql-server
SQL Server 的 TIMESTAMP 数据类型与日期和时间无关!
它只是一个连续数字的二进制表示 - 它只有助于确保一行在被读取后没有改变。
在从未有过的 SQL Server 版本中,它被称为 RowVersion - 因为它确实是这样的。见MSDN docs on ROWVERSION:
是一种在数据库中公开自动生成的唯一二进制数的数据类型。 rowversion 一般用作一种机制 用于版本标记表行。这 rowversion 数据类型只是一个递增的数字,而不是 保留日期或时间。要记录日期或时间,请使用 datetime2 数据类型。
所以您不能将 SQL Server TIMESTAMP 转换为日期/时间 - 它只是不是日期/时间。
但是,如果您说的是时间戳,但实际上是指 DATETIME 列 - 那么您可以使用 MSDN 帮助中 CAST and CONVERT 主题中描述的任何有效日期格式。这些是由 SQL Server “开箱即用”定义和支持的。不支持其他任何内容,例如你必须做很多手动转换和连接(不推荐)。
您要查找的格式有点像 ODBC 规范(样式 = 121):
DECLARE @today DATETIME = SYSDATETIME()
SELECT CONVERT(VARCHAR(50), @today, 121)
给予:
2011-11-14 10:29:00.470
SQL Server 2012 will finally have a FORMAT function 进行自定义格式化......
【讨论】: