int、bigint、smallint 和 tinyint (Transact-SQL)

使用整數數據的精確數字數據類型。 sql

數據類型 express

範圍 app

存儲 函數

bigint ui

-2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807) spa

8 字節 3d

int code

-2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647) orm

4 字節 blog

smallint

-2^15 (-32,768) 到 2^15-1 (32,767)

2 字節

tinyint

0 到 255

1 字節

int 數據類型是 SQL Server 中的主要整數數據類型。 bigint 數據類型用於整數值可能超過 int 數據類型支持範圍的狀況。

在數據類型優先次序表中,bigint 介於 smallmoney 和 int 之間。

僅當參數表達式爲 bigint 數據類型時,函數才返回 bigint。 SQL Server 不會自動將其餘整數數據類型(tinyint、smallint 和 int)提高到 bigint。

注意事項

使用 +、-、*、/ 或 % 等算術運算符將 int、smallint、tinyint 或 bigint 常量值隱式或顯式轉換爲 float、real、decimal 或 numeric 數據類型時,SQL Server 計算數據類型和表達式結果的精度時應用的規則有所不一樣,這取決於查詢是不是自動參數化的。

所以,查詢中的相似表達式有時可能會生成不一樣的結果。 若是查詢不是自動參數化的,則將常量值轉換爲指定的數據類型以前,首先將其轉換爲 numeric,該數據類型的精度很大足以保存常量的值。 例如,常量值 1 轉換爲 numeric (1, 0),常量值 250 轉換爲 numeric (3, 0)。

若是查詢是自動參數化的,則將常量值轉換爲最終數據類型以前,始終先將其轉換爲 numeric (10, 0)。 若是涉及 / 運算符,則對於相似查詢而言,不只結果類型的精度可能不一樣,並且結果值也可能不一樣。 例如,包含表達式 SELECT CAST (1.0 / 7 AS float) 的自動參數化查詢的結果值將不一樣於非自動參數化的同一查詢的結果值,由於自動參數化查詢的結果將被截斷以適合 numeric (10, 0) 數據類型。

 
 
轉換整數數據

將整數隱式轉換爲字符數據類型時,若是整數太大而沒法容納到字符字段中,則 SQL Server 會輸入 ASCII 字符 42,即星號 (*)。

大於 2,147,483,647 的整數常量將轉換爲 decimal 數據類型,而不是 bigint 數據類型。 下面的示例顯示當超過此閾值時,結果的數據類型將從 int 變爲 decimal。

SELECT 2147483647 / 2 AS Result1, 2147483649 / 2 AS Result2 ;

下面是結果集:

Result1      Result2
1073741823   1073741824.500000

 

示例

下面的示例使用 bigint、int、smallint 和 tinyint 數據類型建立一個表。 值插入到每列中並在 SELECT 語句中返回。

CREATE TABLE dbo.MyTable
(
  MyBigIntColumn bigint
 ,MyIntColumn  int
 ,MySmallIntColumn smallint
 ,MyTinyIntColumn tinyint
);

GO

INSERT INTO dbo.MyTable VALUES (9223372036854775807, 214483647,32767,255);
 GO
SELECT MyBigIntColumn, MyIntColumn, MySmallIntColumn, MyTinyIntColumn
FROM dbo.MyTable;

 

下面是結果集:

MyBigIntColumn       MyIntColumn MySmallIntColumn MyTinyIntColumn
-------------------- ----------- ---------------- ---------------
9223372036854775807  214483647   32767            255

(1 row(s) affected)
相關文章
相關標籤/搜索