( 转)Sqlserver中tinyint, smallint, int, bigint的区别 及 10进制转换16进制的方法

一。类型比较

bigint:从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型数据,存储大小为 8 个字节。一个字节就是8位,那么bigint就有64位

int:从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型数据,存储大小为 4 个字节。int类型,最大可以存储32位的数据

smallint:从-2^15(-32,768)到2^15-1(32,767)的整数数据,存储大小为 2 个字节。smallint就是有16位

tinyint:从0到255的整数数据,存储大小为 1 字节。tinyint就有8位。

二。注释

在支持整数值的地方支持 bigint 数据类型。但是,bigint 用于某些特殊的情况,当整数值超过 int 数据类型支持的范围时,就可以采用 bigint。在 SQL Server 中,int 数据类型是主要的整数数据类型。

在数据类型优先次序表中,bigint 位于 smallmoneyint 之间。

只有当参数表达式是 bigint 数据类型时,函数才返回 bigint。SQL Server 不会自动将其它整数数据类型(tinyintsmallintint)提升为bigint

三。总结

所以选择最恰当的数据类型是非常重要的,例如,给你10个18位的全是数字的身份证号码,和10个15位的全是数字的身份证号码。让你以最快的查询的速度查找出来,这20个记录,那么你在设计这个字段的时候,应该有几个地方要注意:

1. 最快的查询速度,无非我们选择int类型的数据来存储这20个身份证号码。但是15位和18位的数据貌似只有bigint才满足条件。

2. 有人要说为啥不用varchar或者char呢。直接存成一个字符串。这个问题问的比较好,首先,int的查询速度肯定比varchar和char要快,那么int类型的数据是首选,但是int在sqlserver中有好几种。这个就要选择最恰当的数据类型。

code:

select STUFF((master.dbo.fn_varbintohexstr( cast( --这是主要功能实现代码 ,其他代码的作用就是将前边的 0x 去掉 CONVERT(bigint, 17) as binary(1) --‘1‘表示生成的16进制数的长度为2的‘1‘次方个,也就是最大为 FF ) ) COLLATE Latin1_General_CI_AS_KS_WS ),1,2,‘‘)

结果: 11

-- By Aaron West, 5/4/2005
-- This version allows negative numbers
CREATE FUNCTION dbo.HexToINT
(
 @Value VARCHAR(8)
)
RETURNS INT
AS
BEGIN
   if @Value LIKE ‘%[^0-9A-Fa-f]%‘
      RETURN NULL
   DECLARE @I BIGINT
   SET @I = CAST(CAST(RIGHT(UPPER(‘00000000‘ + @Value),8) AS BINARY(8)) AS BIGINT) - CAST(0x3030303030303030 AS BIGINT)
   SET @I[email protected]((@I/16)&CAST(0x0101010101010101 AS BIGINT))*7
   RETURN CAST(CAST(
                    (@I&15)
                    +((@I/16)&240)
                    +((@I/256)&3840)
                    +((@I/4096)&61440)
                    +((@I/65536)&983040)
                    +((@I/1048576)&15728640)
                    +((@I/16777216)&251658240)
                    +(@I/CAST(0x0100000000000000 AS BIGINT)*268435456)
                    AS BINARY(4))AS INT)
END
GO 

SELECT
    dbo.HexToINT(‘0ABC‘) ,
    dbo.HexToINT(‘7FFF‘) ,
    dbo.HexToINT(‘0FFF‘) ,
    dbo.HexToINT(‘0‘)    AS Zero,
    dbo.HexToINT(‘7FFFFFFF‘) AS MaxValue,
    dbo.HexToINT(‘80000000‘) AS MaxNeg,
    dbo.HexToINT(‘FFFFFFFF‘) AS NegOne
create function dbo.ufn_vbintohexstr
(
 @vbin_in varbinary(256)
)
returns varchar(514)
as
Begin
   declare @x bigint
   declare @len int
   declare @loop int
   declare @value varbinary(514)
   set @value = 0x
   set @loop = 1
   set @len = datalength(@vbin_in)
   if (@len & 1) <> 0
      set @vbin_in = 0x00 + @vbin_in
   if (@len & 3) < 3
      set @vbin_in = 0x0000 + @vbin_in
   while @loop <= @len
      begin
         set @x = CAST(substring(@vbin_in,@loop,4)AS BIGINT)
         set @x =65536*
          ( (@x&0xF0000000)*4096
           +(@x&0x0F000000)*256
           +(@x&0x00F00000)*16
           +(@x&0x000F0000) )
           +(@x&0xF000)*4096
           +(@x&0x0F00)*256
           +(@x&0x00F0)*16
           +(@x&0x000F)
         set @x = (@x | 0x3030303030303030)+
             ((@x+0x0606060606060606)/16
                & 0x0101010101010101)*7
         select @value  = @value + CAST(@x AS BINARY(8))
         set @loop = @loop + 4
      end
   return ‘0x‘+ right(CAST(@value AS VARCHAR(514)), @len*2)
end
GO
select dbo.ufn_vbintohexstr(0x123456789abcdef1234)
-- outputs: 0x0123456789ABCDEF1234
GO

转摘http://www.cnblogs.com/yyjj/archive/2012/03/06/2381592.html#undefined

( 转)Sqlserver中tinyint, smallint, int, bigint的区别 及 10进制转换16进制的方法

时间: 2024-10-13 11:56:45

( 转)Sqlserver中tinyint, smallint, int, bigint的区别 及 10进制转换16进制的方法的相关文章

sql server数据库中 smallint, int ,bigint ,tinyint的区别与长度

smallint  是一种精确的数值数据类型,其精度在算术运算后不变,采用2个字节编码 有符号的 smallint 值的范围是 -2^15-------2^15 -1,即 -32768 ----32767 无符号的 smallint 值的范围是 0-------2^16 -1,即 0----65535, int 数据类型存储为 4字节整数,取值范围 -2^31---2^31,所以在考虑最大数据范围的前提下,优先考虑使用smallint类型. 在int 数据类型支持范围的数字常量仍被解释为nume

mysql中timestamp,datetime,int类型的区别与优劣

mysql中timestamp,datetime,int类型的区别与优劣 int 1. 占用4个字节 2. 建立索引之后,查询速度快 3. 条件范围搜索可以使用使用between 4. 不能使用mysql提供的时间函数 结论:适合需要进行大量时间范围查询的数据表 datetime 1. 占用8个字节 2. 允许为空值,可以自定义值,系统不会自动修改其值. 3. 实际格式储存(Just stores what you have stored and retrieves the same thing

python中2进制、10进制、16进制等之间的转换

10转2: bin(8) # '0b1000' 2转10: int('1000', 2) # 8 10转16: hex(15) # '0xf' 16转10: int('f', 16) # 15 2进制和16进制中间通过转10进制可以相互转换

mysql 和 sqlserver中备份一张表的区别

sqlserver中备份一张表 SELECT * into qa_buglist_bak FROM qa_buglist 不管表的数据有多大,速度很快: mysql中上述语句就无效了,须得新建一张表,然后让此长表中新增数据 create table qa_buglist_bak like qa_buglist;insert qa_buglist_bak select * from qa_buglist; 如果原表中数据量大,就特别慢,很吃硬盘和CPU 刚刚看了下,也就800万行的数据.. 我应该

C语言实现字符串中(10进制和16进制)转成十进制数

如何将字符串中的10进制数和16进制数提取出来,看以下代码: #include <stdio.h> typedef char TUINT8 ; typedef int TUINT32; TUINT32 Read_DecNumber(const TUINT8* str); TUINT32 Read_HexNumber(const TUINT8* str); int main(void) { int ret = Read_DecNumber("1000"); int d = R

java中integer和int类型的区别

int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Integer是java为int提供的封装类.int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer.在JSP开发中,Integer的默认为null,所以用el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0,所以用el表达式在文本框中显示时,结果

【转载】mysql中timestamp,datetime,int类型的区别与优劣

转载来自souldak,微博:@evagle以下内容整合筛选自互联网: int1. 占用4个字节2. 建立索引之后,查询速度快3. 条件范围搜索可以使用使用between4. 不能使用mysql提供的时间函数结论:适合需要进行大量时间范围查询的数据表 datetime1. 占用8个字节 2. 允许为空值,可以自定义值,系统不会自动修改其值. 3. 实际格式储存(Just stores what you have stored and retrieves the same thing which

SQLServer中临时表与表变量的区别分析

在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们实现的功能基本上是一样的,可如何在一个存储过程中有时候去使用临时表而不使用表变量,有时候去使用表变量而不使用临时表呢? 临时表 临时表与永久表相似,只是它的创建是在Tempdb中,它只有在一个数据库连接结束后或者由SQL命令DROP掉,才会消失,否则就会一直存在.临时表在创建的时候都会产生SQL Server的系统日志,虽它们在Tempdb中体现,是分配在内存中的,它们也支持物理的磁盘,但用户在指定的磁盘里看不到文件. 临时表分为本地

SqlServer中union 和 union all的区别

⒈UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同.⒉对重复结果的处理:UNION在进行表链接后会筛选掉重复的数据,UNION ALL不会去除重复的数据.⒊对排序的处理:UNION将会按照字段的顺序进行排序:UNION ALL只是简单的将两个结果合并后就返回.⒋从效率上说,UNION ALL要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序的话,那么就使用UNION ALL. 原文地址:https://www.