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

Sqlserver中tinyint, smallint, int, bigint的区别 及 10进制转换16进制的方法,第1张

概述一。类型比较 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位的数据 smal

一。类型比较

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

int:从-2^31(-2,147,483,648)到2^31-1(2,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 位于 smallmoney 和 int 之间。

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

三。总结

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

1. 最快的查询速度,无非我们选择int类型的数据来存储这20个身份z号码。但是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

 

一。类型比较bigint:从-2^63(9223372036854775808)到2631(9223372036854775807)的整型数据,存储大小为 8 个字节。一个字节就是8位,那么bigint就有64位int:从31(2,147,0); line-height:1.5!important">483,0); line-height:1.5!important">648)到231647)的整型数据,存储大小为 4 个字节。int类型,最大可以存储32位的数据smallint:从15(32,0); line-height:1.5!important">768)到215767)的整数数据,存储大小为 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位的全是数字的身份z号码,和10个15位的全是数字的身份z号码。让你以最快的查询的速度查找出来,这20个记录,那么你在设计这个字段的时候,应该有几个地方要注意:1. 最快的查询速度,无非我们选择int类型的数据来存储这20个身份z号码。但是15位和18位的数据貌似只有bigint才满足条件。2. 有人要说为啥不用varchar或者char呢。直接存成一个字符串。这个问题问的比较好,首先,int的查询速度肯定比varchar和char要快,那么int类型的数据是首选,但是int在sqlserver中有好几种。这个就要选择最恰当的数据类型。 ---------------------------------------------------------------------------------------------------------------------------------code:select STUFF((master.dbo.fn_varbintohexstr(cast( 这是主要功能实现代码 ,其他代码的作用就是将前边的 0x 去掉 CONVERT(bigint,0); line-height:1.5!important">17) as binary(1) '1'表示生成的16进制数的长度为2的'1'次方个,也就是最大为 FF)) ColLATE latin1_General_CI_AS_KS_WS ),1,'') 结果: 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),0); line-height:1.5!important">8) AS BINARY(8)) BIGINT) - 0x3030303030303030 BIGINT)    @I=-((/16)&0x0101010101010101 BIGINT))*7    RETURN CAST(                     (&15)                     +((240)                     256)3840)                     4096)61440)                     65536)983040)                     1048576)15728640)                     16777216)251658240)                     +(/0x0100000000000000 BIGINT)268435456)                      4))INT) END GO  SELECT      dbo.HexToINT(0ABC'),dbo.HexToINT(7FFF0FFF0')    AS Zero,0); line-height:1.5!important">7FFFFFFF') AS MaxValue,0); line-height:1.5!important">80000000AS MaxNeg,0); line-height:1.5!important">FFFFFFFFAS NegOne  create function dbo.ufn_vbintohexstr (  @vbin_in varbinary(256) ) returns varchar(514) as Begin    declare @x bigint    @len int    @loop @value 514)    set @value = 0x    @loop = 1    @len datalength(@vbin_in)    if (& 1) <> 0       @vbin_in 0x00 @vbin_in    3) < 3       0x0000 while <= @len       begin          @x substring(@vbin_in,@loop,0); line-height:1.5!important">4)BIGINT)          =65536*           ( (@x0xF0000000)4096            0x0F000000)256            0x00F00000)16            0x000F0000) )            0xF000)0x0F00)0x00F0)0x000F)          = (| 0x3030303030303030)+              ((+0x0606060606060606)16                 0x0101010101010101)7          select @value  = + CAST(8))          + 4       end    return 0x'right(514)),0); line-height:1.5!important">@len2) end GO select dbo.ufn_vbintohexstr(0x123456789abcdef1234)  outputs: 0x0123456789ABCDEF1234 GO

 

GO

转载:http://www.cnblogs.com/weixing/archive/2013/05/13/3075682.HTML 总结

以上是内存溢出为你收集整理的Sqlserver中tinyint, smallint, int, bigint的区别 及 10进制转换16进制的方法全部内容,希望文章能够帮你解决Sqlserver中tinyint, smallint, int, bigint的区别 及 10进制转换16进制的方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1168823.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存