2025年11月21日 星期五

[研究]SQL Servr 2019有日期欄位可以記錄到 毫秒 ?

[研究]SQL Servr 2019有日期欄位可以記錄到 毫秒 ?

2025-11-21

SQL Servr 2019有日期欄位可以記錄到 毫秒 ?

資料型別 格式範例 精度 範圍 儲存大小 註解
datetime 2025-11-21 16:45:32.123 0.00333 秒(約 3.33 毫秒) 1753-01-01 ~ 9999-12-31 8 bytes 只能記錄到 1/300 秒,精度非完全毫秒
smalldatetime 2025-11-21 16:45 1 分鐘 1900-01-01 ~ 2079-06-06 4 bytes 精度只有分鐘,不支援毫秒
datetime2(n) 2025-11-21 16:45:32.1234567 0 ~ 7 位小數秒;n=3 可到毫秒
預設n為7
0001-01-01 ~ 9999-12-31 6~8 bytes (依 n 而定) 精度可自訂,推薦取代 datetime
date 2025-11-21 N/A 0001-01-01 ~ 9999-12-31 3 bytes 只有日期,不含時間
time(n) 16:45:32.1234567 0 ~ 7 位小數秒 00:00:00.0000000 ~ 23:59:59.9999999 3~5 bytes 只記錄時間,不含日期
datetimeoffset(n) 2025-11-21 16:45:32.123 +08:00 0 ~ 7 位小數秒 0001-01-01 ~ 9999-12-31 8~10 bytes 包含時區偏移,精度可自訂

重點:

  • 如果你要毫秒精度,datetime2(3) 最合適(最多到 .123 毫秒),且建議取代舊的 datetime。
  • datetime 的精度有限,雖然看起來有三位小數,但實際誤差約 ±3.33 毫秒。
  • datetimeoffset 適合需要同時記錄時區的場景。

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:MyDBConnectionString %>" 
            DeleteCommand="DELETE FROM [Table5] WHERE [Id] = @Id" 
            InsertCommand="INSERT INTO [Table5] ([MyDatetime], [MyDatetime2]) VALUES (@MyDatetime, @MyDatetime2)" 
            SelectCommand="SELECT * FROM [Table5]" 
            UpdateCommand="UPDATE [Table5] SET [MyDatetime] = @MyDatetime, [MyDatetime2] = @MyDatetime2 WHERE [Id] = @Id">
            <DeleteParameters>
                <asp:Parameter Name="Id" Type="Int32" />
            </DeleteParameters>
            <InsertParameters>
                <asp:Parameter Name="MyDatetime" Type="DateTime" />
                <asp:Parameter DbType="DateTime2" Name="MyDatetime2" />
            </InsertParameters>
            <UpdateParameters>
                <asp:Parameter Name="MyDatetime" Type="DateTime" />
                <asp:Parameter DbType="DateTime2" Name="MyDatetime2" />
                <asp:Parameter Name="Id" Type="Int32" />
            </UpdateParameters>
        </asp:SqlDataSource>
        <asp:GridView ID="GridView1" runat="server"></asp:GridView>
    </form>
</body>
</html>

(完)

沒有留言:

張貼留言