Aar*_*and 13 sql-server sql-server-2008
似乎TIMESTAMP信息以某种方式加密,其中日期/时间数据以某种方式以二进制编码.我只是想发现今天修改过的所有行.
Aar*_*and 32
TIMESTAMP是SQL Server团队提供数据类型的一个不幸的名称.这是为了并发,与日期或时间无关 - 他们建议使用别名,ROWVERSION以防止混淆.从这个联机丛书文章,"在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;
Run Code Online (Sandbox Code Playgroud)
然后创建一个TRIGGER触发,UPDATE以使ModifiedDate值保持最新.您可能需要确定NULL在初始化时是否希望ModifiedDate 等于或等于CreatedDate.
根据您的使用场景和您需要的精度范围,您可以使用以下技术:就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
Run Code Online (Sandbox Code Playgroud)
使用select查询,您将能够确定0x000121介于20120501 12:30:00和20120501 12:45:00之间
如果你有没有可能创造这样的表/工作,你可以看看到数据库,并确定与时间戳其他表,也许你会很幸运,并会在那里找到datetime列以及(充满NOW()),那么你可以使用该表作为"时间统治者".
| 归档时间: |
|
| 查看次数: |
4589 次 |
| 最近记录: |