慕容708150
2019-09-03 19:20:32
我有一個像這樣結(jié)構(gòu)的表:CREATE TABLE [TESTTABLE]( [ID] [int] IDENTITY(1,1) NOT NULL, [DateField] [datetime] NULL, [StringField] [varchar](50), [IntField] [int] NULL, [BitField] [bit] NULL)我執(zhí)行以下代碼: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)我的結(jié)果顯示:2009-04-03 15:41:27.*377*為DateField列。任何想法為什么我似乎失去了一毫秒?
4 回答

尚方寶劍之說
TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個贊
SQL Server僅將時間存儲到大約1/300秒。這些總是落在0,3和7毫秒。例如,以最小增量從0開始計(jì)數(shù):
00:00:00.000
00:00:00.003
00:00:00.007
00:00:00.010
00:00:00.013
...
如果你需要毫秒級的精度,那就沒有愉快的方法了。我見過的最佳選項(xiàng)是將值存儲在自定義數(shù)字字段中,并在每次獲取值時重建它,或?qū)⑵浯鎯橐阎袷降淖址?。然后,您可以(可選)為了速度而在本機(jī)日期類型中存儲“近似”日期,但它會引入通常不需要的概念復(fù)雜性。

楊__羊羊
TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個贊
SQL Server 2008具有更高的可用精度。datetime2類型將準(zhǔn)確存儲如下值:2008-12-19 09:31:38.5670514(精度為100納秒)。
- 4 回答
- 0 關(guān)注
- 722 瀏覽
添加回答
舉報
0/150
提交
取消