您的位置:首頁技術文章
文章詳情頁

SQL Server中的數據類型詳解

瀏覽:129日期:2023-03-06 14:25:25
目錄
  • 哪些對象需要數據類型
  • 一、 整數數據類型
    • 1、bit
    • 2、tinyint
    • 3、smallint
    • 4、int (integer)
    • 5、bigint
  • 二、 浮點數據類型
    • 1、real: 近似數值型
    • 2、float[(n)]:近似數值型
    • 3、decimal[p [s] ]
    • 4、numeric[p [s] ]
    • 5、smallMoney貨幣型
    • 6、money貨幣型
  • 三、字符數據類型
    • 1、char[(n)]
    • 2、nchar[(n)]
    • 3、varchar[(n| max )]
    • 4、nvarchar[(n| max )]
    • 5、text
    • 6 、ntext
  • 四、 日期和時間數據類型
    • 1、datetime :日期和時間(1753-1-1 日到 9999-12-31)
    • 2、dateTime2 (n):高精度的datetime類型(0001-01-01 到 9999-12-31)
    • 3、smalldatetime  :精確到分鐘,日期和時間。(1900-01-01 到 2079-06-06)不推薦。
    • 4、date:只表示日期:年-月-日(0001-01-01 到 9999-12-31)
    • 5、time:只表示時間:hh:mm:ss(00:00:00.0000000 到 23:59:59.9999999)
    • 6、datetimeOffset:時間部分增加時區表示
  • 五、二進制數據類型
    • 1、binary
    • 2、varbinary
    • 3、image
  • 六、特殊數據類型
    • 1、 cursor:游標引用
    • 2、timestamp:時間戳
    • 3、uniqueIdentifier:全局唯一標識符,即GUID
    • 4、sql_variant:SQL變量
    • 5、table:表
    • 6、xml
  • 七、SQL Server 2008新增數據類型
    • hierarchid
  • 八、用戶定義的數據類型
    • (1)創建用戶定義的數據類型
    • (2)刪除用戶定義的數據類型
  • 九、參考:

    T-SQL語言和SQLServer數據庫中的數據通常需要定義一個數據類型,數據類型定義了對象可以容納的數據的種類。

    哪些對象需要數據類型

    (1)、表和視圖的列:
    在定義表或視圖時,其列需要定義數據類型。

    (2)、存儲過程的參數:
    在定義存儲過程的T-SQL代碼中定義參數的數據類型。

    (3)、變量:
    如果在T-SQL中使用變量,需要定義數據類型。

    (4)、帶返回值的函數:
    返回一個或多個特定類型數據值的T-SQL函數中的返回值需要定義數據類型。

    (5)、帶返回代碼的存儲過程:
    具有返回代碼的存儲過程。

    一、 整數數據類型

    1、bit

    bit數據類型是整型,其值只能是0、1或空值。這種數據類型用于存儲只有兩種可能值的數據,如Yes 或No、True 或False 、On 或Off.   
    注意:很省空間的一種數據類型,如果能夠滿足需求應該盡量多用。每個TINYINT類型的數據占用1個字節的存儲空間。

    • bit值保存為1、0或NULL 的整數數據類型。1代表true,0代表false。
    • 在插入、修改 bit 數據時,使用 0 或 1。
      SQL Server將字符串值“TRUE”(字符串不分大小寫,或者數字字符'1')轉換為1,將“FALSE”(字符串不分大小寫,或者數字字符'0')轉換為0。將任何非零值轉換為1。
    • 在c# 中讀取數據庫數據時,可以直接用bool型讀取該字段,會直接轉換為true/false。

    2、tinyint

    tinyint數據類型存儲從0 到255 之間的所有正整數。每個tinyint類型的數據占用1個字節的存儲空間。

    3、smallint

    smallint 數據類型存儲從-2的15次方( -32768) 到2的15次方-1( 32767 )之間的所有正負整數。
    每個smallint類型的數據占用2個字節的存儲空間,其中1 位表示整數值的正負號,其它15 位表示整數值的長度和大小。

    4、int (integer)

    int (或 integer)數據類型存儲從-2的31次方 (-2147483648) 到2的31次方-1 (2147483647) 之間的所有正負整數。
    每個INT 類型的數據按4個字節存儲,其中1 位表示整數值的正負號,其它31 位表示整數值的長度和大小。

    5、bigint

    bigint數據類型存儲從-2^63 (-9 223372036854775807) 到2^63-1( 9223372036854775807) 之間的所有正負整數。
    每個BIGINT 類型的數據占用8個字節的存儲空間。

    二、 浮點數據類型

    浮點數據類型用于存儲十進制小數。浮點數值的數據在SQL Server 中采用上舍入(Round up 或稱為只入不舍)方式進行存儲。
    所謂上舍入是指,當(且僅當)要舍入的數是一個非零數時,對其保留數字部分的最低有效位上的數值加1 ,并進行必要的進位。若一個數是上舍入數,其絕對值不會減少。
    如:對3.14159265358979 分別進行2 位和12位舍入,結果為3.15 和3.141592653590。

    1、real: 近似數值型

    real數據類型可精確到第7 位小數,其范圍為從-3.40E -38 到3.40E +38。 每個real類型的數據占用4 個字節的存儲空間。

    2、float[(n)]:近似數值型

    float數據類型可精確到第15 位小數,其范圍為從-1.79E -308 到1.79E +308。 每個FLOAT 類型的數據占用8 個字節的存儲空間。 
    float數據類型可寫為FLOAT[ n ]的形式。n 指定float數據的精度。n 為1到15 之間的整數值。當n 取1 到7 時,實際上是定義了一個real類型的數據,系統用4 個字節存儲它;
    當n 取8 到15 時,系統認為其是float類型,用8 個字節存儲它。

    3、decimal[p [s] ]

    decimal數據類型可以提供小數所需要的實際存儲空間,但也有一定的限制,您可以用2 到17 個字節來存儲從-10的38次方-1 到10的38次方-1 之間的數值。
    可將其寫為decimal[ p [s] ]的形式,p 和s 確定了精確的比例和數位。其中p 表示可供存儲的值的總位數(不包括小數點),缺省值為18; s 表示小數點后的位數,缺省值為0。
    例如:decimal (15 5),表示共有15 位數,其中整數10 位,小數5。  

    4、numeric[p [s] ]

    numeric數據類型與decimal 數據類型完全相同。
    注意:SQL Server 為了和前端的開發工具配合,其所支持的數據精度默認最大為28位。但可以通過使用命令來執行sqlserver.exe程序以啟動SQL Server,可改變默認精度。

    5、smallMoney貨幣型

    smallMoney 數據類型用來表示錢和貨幣值。這種數據類型能存儲從-214748.3648 到214748.3647 之間的數據,精確到貨幣單位的萬分之一。smallmoney 數據類型要求 4 個存儲字節。

    6、money貨幣型

    money數據類型用來表示錢和貨幣值。這種數據類型能存儲從-9220億到9220 億之間的數據,精確到貨幣單位的萬分之一。money數據類型要求 8 個存儲字節。

    三、字符數據類型

    字符數據類型是使用最多的數據類型。它可以用來存儲各種字母、數字符號、特殊符號。一般情況下,使用字符類型數據時須在其前后加上單引號’或雙引號” 。

    1、char[(n)]

    char數據類型的定義形式為char[(n)] 。 以char類型存儲的每個字符和符號占一個字節的存儲空間。n 表示所有字符所占的存儲空間,n 的取值為1 到8000, 
    即可容納8000 個ANSI 字符。若不指定n 值,則系統默認值為1。若輸入數據的字符數小于n,則系統自動在其后添加空格來填滿設定好的空間。若輸入的數據過長,將會截掉其超出部分。

    如果沒有在數據定義或變量聲明語句中指定 n,則默認長度為 1如果在使用 CAST 和 CONVERT 函數時未指定 n,則默認長度為 30。

    2、nchar[(n)]

    nchar數據類型的定義形式為nchar[(n)]。 它與char類型相似。不同的是nchar數據類型n的取值為1 到4000。 因為nchar類型采用UNICODE 標準字符集(CharacterSet)。 
    UNICODE 標準規定每個字符占用兩個字節的存儲空間,所以它比非UNICODE 標準的數據類型多占用一倍的存儲空間。使用UNICODE 標準的好處是因其使用兩個字節做存儲單位,
    其一個存儲單位的容納量就大大增加了,可以將全世界的語言文字都囊括在內,在一個數據列中就可以同時出現中文、英文、法文、德文等,而不會出現編碼沖突。

    3、varchar[(n| max )]

    varchar數據類型的定義形式為varchar[(n| max )]。 它與char類型相似,n 的取值也為1 到8000,若輸入的數據過長,將會截掉其超出部分。
    不同的是,varchar數據類型具有變動長度的特性,因為varchar數據類型的存儲長度為實際數值長度,若輸入數據的字符數小于n ,則系統不會在其后添加空格來填滿設定好的空間。
    一般情況下,由于char數據類型長度固定,因此它比varchar類型的處理速度快。

    4、nvarchar[(n| max )]

    nvarchar數據類型的定義形式為nvarchar [ ( n | max ) ]。它與varchar類型相似。不同的是,nvarchar數據類型采用UNICODE 標準字符集(Character Set), n 的取值為1 到4000。

    5、text

    text數據類型用于存儲大量文本數據,其容量理論上為1 到2的31次方-1 (2147483647)個字節,在實際應用時需要視硬盤的存儲空間而定。
    SQL Server 中,將text和image 類型的數據直接存放到表的數據行中。

    6 、ntext

    ntext數據類型與text類型相似不同的,是ntext類型采用UNICODE 標準字符集(Character Set), 因此其理論容量為230-1(1073741823)個字節。

    四、 日期和時間數據類型

    1、datetime :日期和時間(1753-1-1 日到 9999-12-31)

    datetime 數據類型用于存儲日期和時間的結合體。它可以存儲從公元1753 年1 月1 日零時起到公元9999 年12 月31 日23 時59 分59 秒之間。精確到三百分之一秒或3.33毫秒 

    2、dateTime2 (n):高精度的datetime類型(0001-01-01 到 9999-12-31)

    類似于之前的datetime類型,不過其精度比較高,可以精確到小數點后面7位(100ns),其使用語法為:datetime2(n)。
    0001-01-01 00:00:00.0000000到9999-12-31 23:59:59:9999999,表示日期和時間

    使用示例:

    declare @dt as datetime2(5)
    set @dt = getdate()
    select @dt

    3、smalldatetime  :精確到分鐘,日期和時間。(1900-01-01 到 2079-06-06)不推薦。

    smalldatetime 數據類型用來表示小范圍間的日期和時間,精確到一分鐘。

    4、date:只表示日期:年-月-日(0001-01-01 到 9999-12-31)

    按照年-月-日的格式表示日期

    5、time:只表示時間:hh:mm:ss(00:00:00.0000000 到 23:59:59.9999999)

    按照hh:mm:ss的格式精確表示時間

    6、datetimeOffset:時間部分增加時區表示

    加入了時區偏移量部分,時區偏移量表示為 [+|-] HH:MM。  必需的 + 或 - 符號指示在 UTC(通用協調時間或格林尼治標準時間)中是加上還是減去時區偏移量以獲取本地時間。

    00000-01-01 00:00:00.0000000到99999-12-31 23:59:59:9999999

    使用示例:

    declare @dt as datetimeoffset(8)
    set @dt = "2008-08-08 08:08:08.0 +8:00"
    select @dt

    五、二進制數據類型

    1、binary

    binary 數據類型用于存儲二進制數據。其定義形式為binary (n), n 表示數據的長度,取值為1 到8000 。
    在使用時必須指定binary 類型數據的大小,至少應為1 個字節。BINARY 類型數據占用n+4 個字節的存儲空間。
    在輸入數據時必須在數據前加上字符“0X” 作為二進制標識,如:要輸入“abc ”則應輸入“0xabc ”。
    若輸入的數據過長將會截掉其超出部分。若輸入的數據位數為奇數,則會在起始符號“0X ”后添加一個0,如上述的“0xabc ”會被系統自動變為“0x0abc”。

    2、varbinary

    varbinary 數據類型的定義形式為varbinary (n)。 它與binary 類型相似,n 的取值也為1 到8000,若輸入的數據過長,將會截掉其超出部分。
    不同的是varbinary 數據類型具有變動長度的特性,因為varbinary 數據類型的存儲長度為實際數值長度+4個字節。當binary 數據類型允許NULL 值時,將被視為varbinary 數據類型。
    一般情況下,由于BINARY 數據類型長度固定,因此它比varbinary  類型的處理速度快。

    3、image

    image 數據類型用于存儲大量的二進制數據Binary Data。其理論容量為2的31次方-1(2147483647)個字節。其存儲數據的模式與text數據類型相同。
    通常用來存儲圖形等OLE Object Linking and Embedding對象連接和嵌入對象。在輸入數據時同BINARY數據類型一樣,必須在數據前加上字符“0X”作為二進制標識。應用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把數據存儲在 image 數據類型中。

    六、特殊數據類型

    1、 cursor:游標引用

    cursor 數據類型是一種特殊的數據類型,它包含一個對游標的引用。這種數據類型用在存儲過程中,而且創建表時不能用。

    2、timestamp:時間戳

    timestamp 數據類型是一種特殊的數據類型,用來創建一個數據庫范圍內的唯一數碼。 一個表中只能有一個timestamp列。每次插入或修改一行時,timestamp列的值都會改變。Timestamp 用于表示SQL Server 活動的先后順序。盡管它的名字中有“time”, 但timestamp列不是人們可識別的日期。在一個數據庫里,timestamp值是唯一的  。timestamp的數據類型為rowVersion數據類型的同義詞。

    3、uniqueIdentifier:全局唯一標識符,即GUID

    uniqueIdentifier數據類型用來存儲一個全局唯一標識符,即GUID。由 16 字節的十六進制數字組成。GUID確實是全局唯一的。這個數幾乎沒有機會在另一個系統中被重建??梢允褂肗EWID 函數或轉換一個字符串為唯一標識符來初始化具有唯一標識符的列。

    例如:6F9619FF-8B86-D011-B42D-00C04FC964FF,此號碼可以通過newid()函數獲得,在全世界各地的計算機由此函數產生的數字不會相同。

    4、sql_variant:SQL變量

    用于存儲除文本,圖形數據和timestamp數據外的其它任何合法的Sql Server數據,可以方便Sql Server的開發工作。

    5、table:表

    用于存儲對表或視圖處理后的結果集。這種新的數據類型使得變量可以存儲一個表,從而使函數或過程返回查詢結果更加方便、快捷。

    6、xml

    存儲xml數據的數據類型。可以在列中或者xml類型的變量中存儲xml實例。存儲的xml數據類型表示實例大小不能超過2GB。

    七、SQL Server 2008新增數據類型

    hierarchid

    新增的數據類型,用于創建層次結構的表,或引用位于另一位置的數據層次結構。

    八、用戶定義的數據類型

    用戶定義的數據類型基于在 Microsoft SQL Server 中提供的數據類型。當幾個表中必須存儲同一種數據類型時,并且為保證這些列有相同的數據類型、長度和可空性時,可以使用用戶定義的數據類型。例如,可定義一種稱為postal_code 的數據類型,它基于 Char 數據類型。
    當創建用戶定義的數據類型時,必須提供三個數:數據類型的名稱、所基于的系統數據類型和數據類型的可空性。

    圖形化操作:【可編程性】-->【類型】節點,右擊【用戶定義數據類型】節點,在彈出的框中,按照說明相應操作即可。

    (1)創建用戶定義的數據類型

    創建用戶定義的數據類型可以使用 Transact-SQL 語句。系統存儲過程 sp_addtype 可以來創建用戶定義的數據類型。其語法形式如下:

    sp_addtype {type},[,system_data_bype][,"null_type"]

    其中,type 是用戶定義的數據類型的名稱。system_data_type 是系統提供的數據類型,例如 Decimal、Int、Char   等等。 null_type 表示該數據類型是如何處理空值的,必須使用單引號引起來,例如'NULL'、'NOT NULL'或者'NONULL'。
    例子:創建一個用戶定義的數據類型 ssn,其基于的系統數據類型是變長為11 的字符,不允許空。

    Use cust
    Exec sp_addtype ssn,"Varchar(11)","Not Null"

    例子:創建一個用戶定義的數據類型 birthday,其基于的系統數據類型是 DateTime,允許空。

    Use cust
    Exec sp_addtype birthday,datetime,"Null"

    例子:創建兩個數據類型,即 telephone 和 fax

    Use master
    Exec sp_addtype telephone,"varchar(24),"Not Null"
    Eexc sp_addtype fax,"varchar(24)","Null"

    (2)刪除用戶定義的數據類型

    當用戶定義的數據類型不需要時,可刪除。刪除用戶定義的數據類型的命令是

    sp_droptype {"type"}

    例子:

    Use master
    Exec sp_droptype "ssn"

    注意:當表中的列還正在使用用戶定義的數據類型時,或者在其上面還綁定有默認或者規則時,這種用戶定義的數據類型不能刪除。

    九、參考:

    到此這篇關于SQL Server數據類型的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持。

    標簽: MsSQL
    相關文章:
    国产综合久久一区二区三区