Eric Johnson在2010年8月提出以下问题。 “Sybase中神秘的'timestamp'数据类型是什么?
我试图回答上述帖子,但由于原帖的年龄,本网站不会接受新答案。由于主题仍然是SAP / Sybase ASE专业人员的常见问题解答,因此我决定重新发布上述原始问题,并希望在下面给出一些明确的答案。
回答问题1:'时间戳到底是什么?'
•Sybase ASE数据库的时间戳集中保存在该数据库的内部内存表“dbtable”中 - 此表是在数据库联机时构建的。您可以通过选择@@ dbts来查询当前的数据库时间戳 - 请注意,此varbinary(8)'数据库'时间戳值取决于平台,即受大和小端的影响。
•每个用户表可以有一个时间戳列,用于保存给定行的INSERT / UPDATE的“数据库”时间戳值。成功完成TSQL DML命令后,所有'Table'时间戳列值都由ASE自动维护(就像标识列一样)。但是,与“数据库”时间戳不同,“表”时间戳值与平台无关,因为无论O / S平台的字节顺序如何,它们始终以Big-endian字节顺序保留(有关详细信息,请参阅下面的详细信息)。
回答问题2:“它与时间或日期有任何关系吗?”
不,“数据库”时间戳和页面“本地”时间戳中的值不反映实际日期/时间。
回答问题3:'我可以将其转换为日期时间吗?'
不,您无法将其网页的“数据库”时间戳或“本地”时间戳转换为日期/时间值。
回答问题4:'如果不是时间或日期,你用它做什么?'
•每当修改或创建数据库中的页面时,“数据库”时间戳加1,而受影响页面的“本地”时间戳(在其页眉中)随后与该点的“数据库”时间戳同步时间。
•与当前时间的“数据库”时间戳进行比较时,数据库页面的“本地”时间戳反映了该页面上次更新或首次创建的相对年龄;因此,ASE可以告知数据库中所有页面的更新/创建的时间顺序。
•应用程序可以以与标识列类似的方式使用“表”时间戳列,以查找最近或最近最少插入/更新的行,而不管行的键值。
进一步的信息,警告和警告: -
(1)'数据库'和'本地'时间戳存储在3个部分中,并且依赖于OS平台字节顺序。 例如0xHHHH 0000 LLLLLLLL
(2)用户'Table'时间戳也存储在3个部分中,但始终处于Big-endian方向。 例如0x0000 HHHH LLLLLLLL
(3)数据库时间戳保存在给定数据库的内存系统表dbtable中(在数据库联机时创建)。
仅供参考 - 以上答案,提示和我在Sybase工作时提示是真实准确的,现在工作的是SAP,他拥有产品ASE。