博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
( 转)Sqlserver中tinyint, smallint, int, bigint的区别 及 10进制转换16进制的方法
阅读量:5022 次
发布时间:2019-06-12

本文共 3319 字,大约阅读时间需要 11 分钟。

一。类型比较

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=@I-((@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

 

 

转摘

转载于:https://www.cnblogs.com/annabook/p/3807901.html

你可能感兴趣的文章
有关并查集的emmmm
查看>>
P1022 计算器的改良
查看>>
文件上传解析漏洞
查看>>
多线程频繁写全局变量导致性能降低
查看>>
移动端适配
查看>>
android 控件 显示 隐藏
查看>>
eclipse 默认 utf-8
查看>>
编译原理 模块二
查看>>
TDBXJSONStream(BERLIN新增)的使用
查看>>
nativeexcel将excel导入数据集
查看>>
POJ 2506 Tiling 高精度
查看>>
同一个TextView设置不同的颜色和大小
查看>>
phpstorm 格式化代码方法
查看>>
Longest Common Prefix
查看>>
linux中一些常用的命令总结
查看>>
研究生们典型的一天,躺着也中枪
查看>>
控制input只能输入1-200范围的数字
查看>>
kubectl常用命令
查看>>
关于项目使用ARC的管理方式
查看>>
GCC编译步骤
查看>>