欄位型別分類

欄位分類

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

欄位分類

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

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

文字型別數值型別 (整數)數值型別 (小數)日期型別
charbitdecimaldate
varcharintnumberictime
nvarcharsmallintdatetime
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. 數值型別範圍

    資料類型範圍儲存體
    bit01 (字串值 TRUEFALSE 可以轉換成 bit 值: TRUE 會轉換成 1FALSE 則轉換成 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 位元組
    tinyint02551 位元組
    float-1.79E+308-2.23E-30802.23E-3081.79E+308這會隨著 n 的值而不同
    real-3.40E+38-1.18E-3801.18E-38 到 `3.40E+384 個位元組
    money-922,337,203,685,477.5808922,337,203,685,477.58078 個位元組
    smallmoney- 214、748.3648214、748.36474 個位元組
    decimal(p,s)固定有效位數和小數位數的數字。 當使用最大有效位數時,有效的值是從 - 10^38 +110^38 - 1decimalISO 同義字為 decdec(p, s)numeric 在功能上與 decimal 相同。p(有效位數) 要儲存的最大小數位數總數。 此數目包括小數點的左右兩側。 有效位數必須是從 1 到最大有效位數 38 的值。 預設有效位數是 18

    點提示
    decimal(7,2) = 99999.99

  3. 數值長度設定

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

  4. 日期型別

    • 日期欄位型別分類

      日期欄位型別分類

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

      日期型別範圍

      資料類型位元組資料範圍
      timestamp8 位元組 (Byte)8 Bytes 的 16 進位值
      datetime8 位元組(字元長度最小 19 個位置,最大 23 個位置)175311 日到 99991231 日 時間範圍 00:00:0023:59:59.997 2012-06-30 06:30:02.612
      datetime2(n)6 個位元組代表有效位數小於 3,而 7 個位元組則代表有效位數是 34。所有其他有效位數則需要 8 個位元組西元 111 日到西元 99991231 日 時間範圍 00:00:003:59:59.9999999 2012-06-30 06:30:02.612
      smalldatetime4 位元組 (Byte) 1900:01:012079:06:06190011 日到 207966 日 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-019999-12-31 西元 111 日到西元 9999123

      重點提示

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

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

      DateTimeDateTime2 之間的主要差異如下表所示

      比較值DateTimeDateTime2
      句法DateTimeDateTime2[(n)] 其中 n 是從 07 的小數秒精度
      格式年-月-日 時:分:秒.nnnYYYY-MM-DD 時:分:秒[.n]
      日期範圍175311日至99991231通過 9999-12-31
      時間範圍00:00:0023:59:59.99700:00:0023:59:59.9999999
      用法聲明 @MyDatetime 日期時間聲明 @MyDatetime2 datetime2(7)
      小數秒範圍零到三位數字(範圍從 0999)表示秒的小數部分。09999999 之間的零到七位數字表示秒的小數部分
      準確性四捨五入到 0.0000.0030.007 秒的增量100 納秒
      預設值1900-01-01 00:00:001900-01-01 00:00:00
      字元長度最少 19 個位置,最多 23 個位置最少 19 個位置,最多 27 個位置
      使用者定義的小數秒精度是的
      儲存大小8位元組精度小於 3 時為 6 個位元組。
      符合 ANSIISO 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 decimalnumeric 資料型別的最大小數點位數為 38。 為了在讀取和寫入資料時維持資料完整性, SqlDataReader 會公開 SQL Server 特定的具型別存取子方法,這些方法會傳回的 System.Data.SqlTypes 物件以及傳回 .NET Framework 類型的存取子方法。 SQL Server 型別和 .NET Framework 型別也會由 DbTypeSqlDbType 類別 (Class) 中的列舉型別 (Enumeration) 表示,而且您可以在指定 SqlParameter 資料型別時使用這些類別。

    下表顯示推斷的 .NET Framework 類型、DbTypeSqlDbType 列舉,以及 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