SQL Server 的 DateTime 資料型別:缺少的毫秒
資料準確性至關重要,尤其是在處理時間戳記時。 然而,SQL Server 的 datetime
類型有一個常見的問題:毫秒的遺失。本文探討了發生這種情況的原因並提供了解決方案。
考慮這種情況:使用以下方式插入資料:
<code class="language-sql">INSERT INTO TESTTABLE (IntField, BitField, StringField, DateField) VALUES ('1', 1, 'hello', {ts '2009-04-03 15:41:27.378'});</code>
使用以下方式擷取資料:
<code class="language-sql">select * from testtable with (NOLOCK)</code>
顯示截斷的DateField
:「2009-04-03 15:41:27.377」。 最後一毫秒過去了。
問題的根源
datetime
資料類型的固有限制是原因。 SQL Server 的 datetime
僅支援約 1/300 秒(0、3 或 7 毫秒)的時間精度。這些增量之外的值將會向下捨去。 這解釋了我們的範例中缺少的毫秒。
實現毫秒精度
為了維持毫秒精度,需要替代方法。 沒有一個完美的解決方案,但有兩種常見的方法:
數字欄位: 將時間戳儲存為數值(例如,表示自紀元以來的毫秒數)。 這需要自訂程式碼來轉換為人類可讀的格式或從人類可讀的格式轉換。
字串表示: 使用一致的格式將時間戳記儲存為字串(例如「YYYY-MM-DD HH:mm:ss.fff」)。 (可選)包含一個近似的 datetime
欄位以加快查詢速度。
這兩種方法都會增加複雜性。 根據增加的設計和維護開銷仔細評估對毫秒精度的需求。
以上是為什麼 SQL Server 在儲存日期時間資料時會遺失毫秒?的詳細內容。更多資訊請關注PHP中文網其他相關文章!