在使用SQL Server处理时间戳时,了解其精度限制至关重要。
考虑以下表结构:
<code class="language-sql">CREATE TABLE [TESTTABLE] ( [ID] [int] IDENTITY(1,1) NOT NULL, [DateField] [datetime] NULL, [StringField] [varchar](50), [IntField] [int] NULL, [BitField] [bit] NULL )</code>
执行以下代码:
<code class="language-sql">BEGIN INSERT INTO TESTTABLE (IntField, BitField, StringField, DateField) VALUES ('1', 1, 'hello', {ts '2009-04-03 15:41:27.378'}); SELECT SCOPE_IDENTITY() END</code>
预期行为是存储具有完整毫秒精度的时间戳。但是,当使用以下语句查询表时:
<code class="language-sql">select * from testtable with (NOLOCK)</code>
您可能会注意到DateField列显示:
<code>2009-04-03 15:41:27.*377*</code>
SQL Server 只存储大约 1/300 秒的时间。这些时间值总是落在 0、3 和 7 毫秒上。例如:
<code>00:00:00.000<br></br> 00:00:00.003<br></br> 00:00:00.007<br></br> 00:00:00.010<br></br> 00:00:00.013<br></br> ...</code>
如果毫秒精度至关重要,SQL Server 的原生数据类型中没有直接的解决方案。可以考虑以下方法:
以上是SQL Server 的'日期时间”数据类型中的毫秒精度有多准确?的详细内容。更多信息请关注PHP中文网其他相关文章!