似乎TIMESTAMP
信息以某种方式加密,其中日期/时间数据以某种方式以二进制编码。我只是想发现今天修改过的所有行。
答案 0 :(得分:32)
TIMESTAMP
是SQL Server团队提供数据类型的不幸名称。这是为了并发,与日期或时间无关 - 他们建议使用别名ROWVERSION
来防止混淆。从this Books Online article,“在DDL语句中,尽可能使用rowversion而不是时间戳。”
很遗憾,您无法从已有的ROWVERSION
列中获取任何日期/时间详细信息,但如果此信息很重要,则应添加CreatedDate / ModifiedDate列,例如:
ALTER TABLE dbo.foo ADD CreatedDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;
ALTER TABLE dbo.foo ADD ModifiedDate DATETIME NULL;
然后在UPDATE
上触发create a TRIGGER
以使ModifiedDate值保持最新。您可能需要决定在初始化时是否希望ModifiedDate为NULL
或等于CreatedDate。
答案 1 :(得分:14)
TIMESTAMP只是一个增量的每行值。它没有任何实际的日期/时间信息。
您需要的是例如一个实际的DATETIME列,其默认值设置为GETUTCDATE()
或类似的东西。
答案 2 :(得分:9)
根据使用情况和您需要的精确度,您可以使用以下技术: 对于TIMESTAMP类似于全局计数器,您可以添加一个包含2列的全局表:
日期时间,时间戳
并且每隔N分钟在那里制作一些JOB插入值(取决于所需的精度)。 Job将NOW()插入datetime列和当前TIMESTAMP值。通过这种方式,您可以获得某种“时间标尺”,并且您始终可以确定来自另一个表的特定TIMESTAMP属于哪个时间跨度。 样品: 您有时间戳值0x000121并在生成时查找时间跨度。 你的表有值
20120501 12:00:00 0x000001
20120501 12:15:00 0x000061
20120501 12:30:00 0x000091
20120501 12:45:00 0x000151
使用选择查询,您将能够确定0x000121介于两者之间 20120501 12:30:00和 20120501 12:45:00
如果你没有可能创建这样的表/作业,你可以查看数据库并确定带有时间戳的其他表,也许你会很幸运,也会在那里找到datetime列(填写NOW()),然后就可以了将该表用作“时间标尺”。