( 转)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 位于 smallmoney 和 int 之间。
只有当参数表达式是 bigint 数据类型时,函数才返回 bigint。SQL Server 不会自动将其它整数数据类型(tinyint、smallint 和 int)提升为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,'')
结果:
-- By Aaron West, //
-- This version allows negative numbers
CREATE FUNCTION dbo.HexToINT
(
@Value VARCHAR()
)
RETURNS INT
AS
BEGIN
if @Value LIKE '%[^0-9A-Fa-f]%'
RETURN NULL
DECLARE @I BIGINT
SET @I = CAST(CAST(RIGHT(UPPER('' + @Value),) AS BINARY()) AS BIGINT) - CAST(0x3030303030303030 AS BIGINT)
SET @I=@I-((@I/)&CAST(0x0101010101010101 AS BIGINT))*
RETURN CAST(CAST(
(@I&)
+((@I/)&)
+((@I/)&)
+((@I/)&)
+((@I/)&)
+((@I/)&)
+((@I/)&)
+(@I/CAST(0x0100000000000000 AS BIGINT)*)
AS BINARY())AS INT)
END
GO SELECT
dbo.HexToINT('0ABC') ,
dbo.HexToINT('7FFF') ,
dbo.HexToINT('0FFF') ,
dbo.HexToINT('') AS Zero,
dbo.HexToINT('7FFFFFFF') AS MaxValue,
dbo.HexToINT('') AS MaxNeg,
dbo.HexToINT('FFFFFFFF') AS NegOne
create function dbo.ufn_vbintohexstr
(
@vbin_in varbinary()
)
returns varchar()
as
Begin
declare @x bigint
declare @len int
declare @loop int
declare @value varbinary()
set @value = 0x
set @loop =
set @len = datalength(@vbin_in)
if (@len & ) <>
set @vbin_in = 0x00 + @vbin_in
if (@len & ) <
set @vbin_in = 0x0000 + @vbin_in
while @loop <= @len
begin
set @x = CAST(substring(@vbin_in,@loop,)AS BIGINT)
set @x =*
( (@x&0xF0000000)*
+(@x&0x0F000000)*
+(@x&0x00F00000)*
+(@x&0x000F0000) )
+(@x&0xF000)*
+(@x&0x0F00)*
+(@x&0x00F0)*
+(@x&0x000F)
set @x = (@x | 0x3030303030303030)+
((@x+0x0606060606060606)/
& 0x0101010101010101)*
select @value = @value + CAST(@x AS BINARY())
set @loop = @loop +
end
return '0x'+ right(CAST(@value AS VARCHAR()), @len*)
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进制的方法的更多相关文章
- python中2进制、10进制、16进制等之间的转换
10转2: bin(8) # '0b1000' 2转10: int( 10转16: hex(15) # '0xf' 16转10: int( 2进制和16进制中间通过转10进制可以相互转换 from b ...
- mysql 和 sqlserver中备份一张表的区别
sqlserver中备份一张表 SELECT * into qa_buglist_bak FROM qa_buglist 不管表的数据有多大,速度很快: mysql中上述语句就无效了,须得新建一张表, ...
- C语言实现字符串中(10进制和16进制)转成十进制数
如何将字符串中的10进制数和16进制数提取出来,看以下代码: #include <stdio.h> typedef char TUINT8 ; typedef int TUINT32; T ...
- python2/3中 将base64数据写成图片,并将图片数据转为16进制数据的方法、bytes/string的区别
1.python2将base64数据写成图片,并将数据转为16进制字符串的方法 import binascii img = u'R0lGODlhagAeAIcAAAAAAAAARAAAiAAAzABE ...
- sql server数据库中 smallint, int ,bigint ,tinyint的区别与长度
smallint 是一种精确的数值数据类型,其精度在算术运算后不变,采用2个字节编码 有符号的 smallint 值的范围是 -2^15-------2^15 -1,即 -32768 ----327 ...
- MySql中的tinying,smallint,int,bigint的类型介绍——转载
tinyint 从 0 到 255 的整型数据.存储大小为 1 字节. smallint 从 -2^15 (-32,768) 到 2^15 – 1 (32,767) 的整型数据.存储大小为 2 个字节 ...
- SQLServer中临时表与表变量的区别分析(转)
在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们实现的功能基本上是一样的,可如何在一个存储过程中有时候去使用临时表而不使用表变量,有时候去使用表变量而不使用临时表呢? 临时表 临时表与永 ...
- SQLServer中临时表与表变量的区别分析
临时表 临时表与永久表相似,只是它的创建是在Tempdb中,它只有在一个数据库连接结束后或者由SQL命令DROP掉,才会消失,否则就会一直存在.临时表在创建的时候都会产生SQL Server的系统日志 ...
- SQLServer中临时表与表变量的区别分析【转】
在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们实现的功能基本上是一样的,可如何在一个存储过程中有时候去使用临时表而不使用表变量,有时候去使用表变量而不使用临时表呢? 临时表 临时表与永 ...
随机推荐
- Oracle数据库面试题(转)
1. Oracle跟SQL Server 2005的区别? 宏观上: 1). 最大的区别在于平台,oracle可以运行在不同的平台上,sql server只能运行在windows平台上,由于windo ...
- JS监听checkbox的选择获取取消事件代码案列
function OncheckBox(index){ if ($(index).attr("checked") == "checked") { alert($ ...
- react-native android 打包发布
react-native android 打包步骤 <一>.生成签名文件(应用身份证) 1.使用keytool命令 keytool -genkey -v -keystore my-r ...
- 在xshell中使用sftp上传文件
Xshell 5 (Build 1335)Copyright (c) 2002-2017 NetSarang Computer, Inc. All rights reserved. Type `hel ...
- hadoop yarn HA集群搭建
可先完成hadoop namenode HA的搭建:http://www.cnblogs.com/kisf/p/7458519.html 搭建yarnde HA只需要在namenode HA配置基础上 ...
- shell编程(一)
转义和引用 引入问题:之前我们知道了变量名前面加上$符号代表引用变量,但是如果我现在就需要打印出$符号该怎么办呢?想想我们在python中怎么做的,答案是转义. 转义 Shell中有两种字符一种是普通 ...
- PHP设计模式(五): 原型模式
- 解决Eclipse Maven插件的最佳方案
最近在尝试使用GAE,要求项目必须使用Maven,于是下载了Maven3.1.1配置了环境变量.但是在为Eclipse EE安装Maven插件的时候遇到了问题. 官网的建议是: 在Eclipse EE ...
- Interleaving String,交叉字符串,动态规划
问题描述: Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example,Give ...
- codeforces103E Buying Sets
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...