环境:SQLServer 2008 R2
使用整数数据的精确数字数据类型。
bigint
从 -2^63 (-9223372036854775808) 到 2^63-1(9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。
int
从 -2^31 (-2,147,483,648) 到 2^31 - 1(2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。
smallint
从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存储大小为 2 个字节。
tinyint
从 0 到 255 的整型数据。存储大小为 1 字节。
注释
在支持整数值的地方支持 bigint 数据类型。但是,bigint 用于某些特殊的情况,当整数值超过 int 数据类型支持的范围时,就可以采用 bigint。在 SQL Server 中,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。
SELECT2147483647 / 2 AS Result1, 2147483649 / 2 AS Result2 ;
下面是结果集:
Result1 Result2
1073741823 1073741824.500000
总结
数据类型的选择要根据实际情况而定,最好能满足需求。不要杀鸡用牛刀,因为对空间的浪费会很严重,效率也会受到一定的影响。
参考资料:http://msdn.microsoft.com/zh-cn/library/ms187745.aspx
http://www.ancher.cn/blog/article.asp?id=127
分享到:
相关推荐
整数型数据包括bigint型、int型、smallint型和tinyint型。 浮点数据类型包括real型、float型、decimal型和numeric型。
最近使用mysql数据库的时候遇到了多种数字的类型,主要有int,bigint,smallint和tinyint;接下来将详细介绍以上三种类型的应用
有一个需求是要在一个云监控的状态值...问题是再将bigint 转为 int时获取原始状态值时,SQLServer报错了: 消息 8115,级别 16,状态 2,第 1 行 将 expression 转换为数据类型 int 时出现算术溢出错误。 因为状态码中
JDBC数据类型与数据库字段对应表——SQL Server篇 数值型 整型 JDBC tinyint java.lang.Integer smallint int bigint java.lang.Long mediumint java.lang.Long
字符数据的类型:Char,Varchar和Text 数值型数据类型:bigint,int,smallint,tinyint,decimal,numeric,flo at和real 货币型数据类型:Money和Smallmoney 时间/日期数据类型: Datetime 和 Smalldatetime ...
有一个需求是要在一个云监控的状态值...问题是再将bigint 转为 int时获取原始状态值时,SQLServer报错了: 消息 8115,级别 16,状态 2,第 1 行 将 expression 转换为数据类型 int 时出现算术溢出错误。 因为状态码中
其中,BIGINT、 SQL_VARIANT 和TABLE 是SQL Server 2000 中新增加的3 种数据类型。下面分类讲述各种数据类型。 一、 整数数据类型 整数数据类型是最常用的数据类型之一。 1、INT (INTEGER) INT (或...
QL2000技术之数据类型算机中数据有两种特征:类型和长度。所谓数据类型就是以数据的表现方式和存储方式...其中,BIGINT、 SQL_VARIANT 和TABLE 是SQL Server 2000 中新增加的3 种数据类型。下面分类讲述各种数据类型。
ORACLE和SQLSERVER存储过程的对应写法。
实现sqlserver自动备份, select @数据库文件大小=cast((convert (dec (15,2),sum(convert(bigint,case when status & 64 = 0 then size else 0 end))) + convert (dec (15,2),sum(convert(bigint,case when status ...
SQL2000数据编程vc++类型 ...BIGINT、 SQL_VARIANT 和TABLE 是SQL Server 2000 中新增加的3 种数据类型。下面分类讲述各种数据类型。 .................................................................
JDBC数据类型与数据库字段对应表——mysql篇 数值型 整型 JDBC tinyint java.lang.Integer smallint mediumint java.lang.Long int bigint java.math.BigInteger
MySQL数据类型 含义(有符号) tinyint(m) 1个字节 范围(-128~127) smallint(m) 2个字节 范围(-32768~32767) mediumint(m) 3个字节 范围(-8388608~8388607) int(m) 4个字节 范围(-2147483648~2147483647) ...
[provinceTypeNum] [int] NULL 类型等级 [shortName] [nvarchar] NULL 简称(汉语拼音) [spell] [nvarchar] NULL 拼音拼写 [areaId] [nvarchar] NULL 区域id [postCode] [nvarchar] NULL 邮政编码 T_city表 市...
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。 关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。 BIT数据类型保存位字段...
Mysql支持所有标准SQL中的数值类型,其中包括严格数据类型(INTEGER,SMALLINT,DECIMAL,NUMBERIC),以及近似数值数据类型(FLOAT,REAL,DOUBLE PRESISION),并在此基础上进行扩展。 扩展后增加了TINYINT,...
int、bigint、smallint 和 tinyint 使用整数数据的精确数字数据类型。 bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。 int ...
• 整数类型:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT。 • 浮点数和定点数类型:FLOAT、DOUBLE、DECIMAL。 • 字符串类型:CHAR、VARCHAR、TEXT、TINYTEXT、MEDIUMTEXT、LONGTEXT。 • 日期和时间类型:DATE、...