欄位型別分類

欄位分類

欄位型別一般可分為以下幾種

欄位分類

  1. 文字 型別
  2. 數字 型別
  3. 日期 型別

欄位分類明細列表
欄位型別分類

文字型別數值型別 (整數)數值型別 (小數)日期型別
charbitdecimaldate
varcharintnumberictime
nvarcharsmallint…datetime
…bigint…
real
currency
float
…

文字欄位型別

  1. 文字欄位型別分類

    欄位分類明細列表

    關鍵字自動補空白多國語系
    Char會不支援
    Var不會不支援
    N-支援

    Char 型別範例

    Varchar 型別範例

    NVarChar 型別範例

  2. 文字欄位型別長度設定

    文字欄位型別長度設定
    1.小於等於 50,則等於 50
    2.大於 50,則等於 250
    3.無法預估,則 MAX


數值欄位型別

  1. 數值欄位型別分類

    類型型別
    布林值bit
    整數int
    小數decimal(18,4)
  2. 數值型別範圍

    資料類型範圍儲存體
    bit0 到 1 (字串值 TRUE 和 FALSE 可以轉換成 bit 值: TRUE 會轉換成 1,FALSE 則轉換成 0)1 位元組
    bigint-2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807)8 個位元組
    int-2^31(-2,147,483,648) 到 2^31-1 (2,147,483,647)4 個位元組
    smallint-2^15 (-32,768) 到 2^15-1 (32,767)2 位元組
    tinyint0 至 2551 位元組
    float-1.79E+308 到 -2.23E-308、0 及 2.23E-308 到 1.79E+308這會隨著 n 的值而不同
    real-3.40E+38 到 -1.18E-38、0 及 1.18E-38 到 `3.40E+384 個位元組
    money-922,337,203,685,477.5808 到 922,337,203,685,477.58078 個位元組
    smallmoney- 214、748.3648 到 214、748.36474 個位元組
    decimal(p,s)固定有效位數和小數位數的數字。 當使用最大有效位數時,有效的值是從 - 10^38 +1 到 10^38 - 1。decimal 的 ISO 同義字為 dec 及 dec(p, s)。numeric 在功能上與 decimal 相同。p(有效位數) 要儲存的最大小數位數總數。 此數目包括小數點的左右兩側。 有效位數必須是從 1 到最大有效位數 38 的值。 預設有效位數是 18。

    點提示
    decimal(7,2) = 99999.99

  3. 數值長度設定

    數值長度設定
    int : 固定,不用設定
    bit : 固定,不用設定
    decimal: 18,4

  4. 日期型別

    • 日期欄位型別分類

      日期欄位型別分類

      類型型別
      日期date
      時間time
      日期時間datetime
      日期時間(大範圍)datetime2
      日期時間(簡單型)smalldatetime
      時間戳記timestamp
    • 日期型別範圍

      日期型別範圍

      資料類型位元組資料範圍
      timestamp8 位元組 (Byte)8 Bytes 的 16 進位值
      datetime8 位元組(字元長度最小 19 個位置,最大 23 個位置)1753 年 1 月 1 日到 9999 年 12 月 31 日 時間範圍 00:00:00 到 23:59:59.997 2012-06-30 06:30:02.612
      datetime2(n)6 個位元組代表有效位數小於 3,而 7 個位元組則代表有效位數是 3 和 4。所有其他有效位數則需要 8 個位元組西元 1 年 1 月 1 日到西元 9999 年 12 月 31 日 時間範圍 00:00:00 到 3:59:59.9999999 2012-06-30 06:30:02.612
      smalldatetime4 位元組 (Byte) 1900:01:01 到 2079:06:061900 年 1 月 1 日到 2079 年 6 月 6 日 2012-09-23 17:23
      datetimeoffset(n)10 Bytes(固定)預設值 最小 26 位數 (YYYY-MM-DD hh:mm:ss {+/-}hh:mm) 最大 34 位數 (YYYY-MM-DD hh:mm:ss. nnnnnnn {+/-}hh:mm)0001-01-01 到 9999-12-31 西元 1 年 1 月 1 日到西元 9999 年 12 月 3

      重點提示

      • 大部份情形使用 date 型別(特別是需要用於統計的欄位)
      • 需要記錄時間時再增加一欄 datetime 型別欄位
    • DateTime 與 DateTime2
      SQL Server 日期時間我們很常看到使用 datetime,如果沒有特殊理由,建議使用 datetime2 。

      datetime2 優點
      1.符合 ANSI 或 ISO 8601 標準
      2.資料精準度 100 nano second,比 datetime 更高精準度(3 位小數)
      3.儲存大小不到 3 個有效位數為 6 個位元組,
      4.比使用 datetime 相同小數位數的所需儲存容量更小
      5.使用者可指定精準度
      6.日期時間範圍更大

      DateTime 與 DateTime2 之間的主要差異如下表所示

      比較值DateTimeDateTime2
      句法DateTimeDateTime2[(n)] 其中 n 是從 0 到 7 的小數秒精度
      格式年-月-日 時:分:秒.nnnYYYY-MM-DD 時:分:秒[.n]
      日期範圍1753年1月1日至9999年12月31日通過 9999-12-31
      時間範圍00:00:00 至 23:59:59.99700:00:00 至 23:59:59.9999999
      用法聲明 @MyDatetime 日期時間聲明 @MyDatetime2 datetime2(7)
      小數秒範圍零到三位數字(範圍從 0 到 999)表示秒的小數部分。0 到 9999999 之間的零到七位數字表示秒的小數部分
      準確性四捨五入到 0.000、0.003 或 0.007 秒的增量100 納秒
      預設值1900-01-01 00:00:001900-01-01 00:00:00
      字元長度最少 19 個位置,最多 23 個位置最少 19 個位置,最多 27 個位置
      使用者定義的小數秒精度不是的
      儲存大小8位元組精度小於 3 時為 6 個位元組。
      符合 ANSI 和 ISO 8601 標準不是的

      實例比較
      開啟 SSMS 新查詢,輸入以下指令

      DECLARE @dateTime2 datetime2(7)
      DECLARE @dateTime datetime
      SET @dateTime2 = '2000-12-31 10:30:30.5555555'
      SET @dateTime = @dateTime2
      SELECT
      'datetime2'=@dateTime2 ,
      'datetime'=@dateTime

      執行結果

    • 資料範例

      問題:從 2022/01/01 - 2022/01/06 客戶銷貨總額為多少?

      答案:10 + 40 + 50 = 100萬 # 200萬

      原因:查詢範圍不正確

程式設計對應

  1. SQL Server 資料類型對應
    SQL Server 和 .NET Framework 是以不同的型別系統為基礎。 例如,.NET Framework Decimal 結構的最大小數點位數為 28,而 SQL Server decimal 和 numeric 資料型別的最大小數點位數為 38。 為了在讀取和寫入資料時維持資料完整性, SqlDataReader 會公開 SQL Server 特定的具型別存取子方法,這些方法會傳回的 System.Data.SqlTypes 物件以及傳回 .NET Framework 類型的存取子方法。 SQL Server 型別和 .NET Framework 型別也會由 DbType 和 SqlDbType 類別 (Class) 中的列舉型別 (Enumeration) 表示,而且您可以在指定 SqlParameter 資料型別時使用這些類別。

    下表顯示推斷的 .NET Framework 類型、DbType 與 SqlDbType 列舉,以及 SqlDataReader 的存取子方法。

  2. 對照表

    SQL Server Database Engine 類型.NET Framework 類型SqlDbType 列舉型別DbType 列舉型別
    BIGINTInt64BigIntInt64
    BINARYByte[]VarBinaryBinary
    bitBooleanBitBoolean
    charStringCharAnsiStringFixedLength
     Char[] String
    date1DatetimeDateDateDateDate
    (SQL Server 2008 及以後版本)   
    DatetimeDatetimeDateTimeDateTime
    datetime2DatetimeDateTime2DateTime2
    (SQL Server 2008 及以後版本)   
    datetimeoffsetDateTimeOffsetDateTimeOffsetDateTimeOffset
    (SQL Server 2008 及以後版本)   
    decimalDecimalDecimalDecimal
    FILESTREAM attribute (varbinary(max))Byte[]VarBinaryBinary
    FLOATDoubleFloatDouble
    imageByte[]BinaryBinary
    intInt32IntInt32
    moneyDecimalMoneyDecimal
    NCHARStringNCharStringFixedLength
     Char[]  
    ntextStringNTextString
     Char[]  
    NUMERICDecimalDecimalDecimal
    NVARCHARStringNVarCharString
     Char[]  
    realSingleRealSingle
    rowversionByte[]TimestampBinary
    smalldatetimeDatetimeDateTimeDateTime
    SMALLINTInt16SmallIntInt16
    SMALLMONEYDecimalSmallMoneyDecimal
    sql_variantObject 2VariantObject
    textStringTextString
     Char[]  
    timeTimeSpanTimeTime
    (SQL Server 2008 及以後版本)
    timestampByte[]TimestampBinary
    TINYINTByteTinyIntByte
    UNIQUEIDENTIFIERGuidUniqueIdentifierGuid
    varbinaryByte[]VarBinaryBinary
    varcharStringVarCharAnsiString, String
     Char[]  
    xmlXmlXmlXml