我有一个像这样结构的表:CREATE TABLE [TESTTABLE]( [ID] [int] IDENTITY(1,1) NOT NULL, [DateField] [datetime] NULL, [StringField] [varchar](50), [IntField] [int] NULL, [BitField] [bit] NULL)我执行以下代码:BEGIN INSERT INTO TESTTABLE (IntField, BitField, StringField, DateField) VALUES ('1', 1, 'hello', {ts '2009-04-03 15:41:27.378'}); SELECT SCOPE_IDENTITY() END然后select * from testtable with (NOLOCK)我的结果显示:2009-04-03 15:41:27.*377*为DateField列。任何想法为什么我似乎失去了一毫秒?
4 回答
尚方宝剑之说
TA贡献1788条经验 获得超4个赞
SQL Server仅将时间存储到大约1/300秒。这些总是落在0,3和7毫秒。例如,以最小增量从0开始计数:
00:00:00.000
00:00:00.003
00:00:00.007
00:00:00.010
00:00:00.013
...
如果你需要毫秒级的精度,那就没有愉快的方法了。我见过的最佳选项是将值存储在自定义数字字段中,并在每次获取值时重建它,或将其存储为已知格式的字符串。然后,您可以(可选)为了速度而在本机日期类型中存储“近似”日期,但它会引入通常不需要的概念复杂性。
杨__羊羊
TA贡献1943条经验 获得超7个赞
SQL Server 2008具有更高的可用精度。datetime2类型将准确存储如下值:2008-12-19 09:31:38.5670514(精度为100纳秒)。
- 4 回答
- 0 关注
- 667 浏览
添加回答
举报
0/150
提交
取消