#数据库sql server 的数据类型
1.精确数字类型
(1)整数类型包括以下几种。
bigint:可以存储-9223372036854775808~ 9223372036854775807范围内的所有整型数据,每个bigint数据类型值存储在8字节中。
**int(integer)*可以存储-2147483648~2147483647范围内的所有正负整数,每个int数据类型值存储在4字节中。
smallint:可以存储-32768~32767范围内的所有正负整数,每个smallint类型的数据占用2字节的存储空间。
tinyint:可以存储0~255范围内的所有正整数,每个tinyint类型的数据占用1字节的存储空间。
(2) bit:称为位数据类型,其数据有两种取值 0和1,长度为1字节。在输入0以外的其他值时,系统均把它们当1看待。这种数据类型常作为逻辑变量使用,用来表示真、假或是、否等二值选择
#(3) decimal和numeric(数值类型)。 decimal数据类型和numeric数据类型完全相同,它们可以提供小数所需要的实际存储空间,但也有一定的限制,可以用2-17字节来储存 -10的38次方+1~10的38次方-1的10固定精度和小数位的数字。
#(4) money 和small money 类型。
money:用于存储货币值,存储在money数据类型中的数值以一个整数部分和一个小数部分存储在两个4字节的整型值中,存储范围为-9223372136854775808 ~
9223372136854775807,精确到货币单位的10%
smallmoney:与money数据类型类似,但范围比money数据类型小,其存储范围为-2147483468~2147483467,精确到货币单位的10%。
#2)近似数字类型
real:可以存储正的或者负的十进制数值,最大可以有7位精确位数,它的存储范围为-3.40× 10的38次方~3.40×10的38次方。每个real类型的数据占用4字节的存储空间。
float:可以精确到第15位小数,其范围为一1.79 × 10的308次方k-1.79 ×10的308次方。如果不指定float数据类型的长度,它占用8字节的存储空间。float数据类型也可以写为float(n)的形式,n指定float数据的精度,n为1-15的整数值。当n取1-7时,实际上是定义了个real类型的数据,系统用4字节存储它;当n取8~15时,系统认为其是float类型,用8字节存储它。
#3)日期和时间类型
datetime;用于存储日期和时间的结合体,它可以存储从公元1753年1月1日零时一公元9999年12月31日23时59分59秒的所有日期和时间,其精确度可达1/300 .m3.33 ms, datetime数据类型所占用的存储空间为8字节,其中前4字节用干存储基于1900年1月1日之前或者之后的日期数,数值分正负,负数存储的数值代表在基数日期之前的日期,正数表示基数日期之后的日期,时间以子夜后的毫秒存储在后面的4字节中。
smalldatetime:与datetime数据类型类似,但其日期时间范围较小,它存储1900年1月1日~2079年6月6日的日期。 smalldatetime数据类型使用4字节存储数据,SQLServer 2000用2字节存储日期1900年1月1日以后的天数,时间以子夜后的分钟数形式存储在另外两个字节中,SmallDatetime的精度为1 min.
date:仅存储日期,不存储时间,范围是0001年1月1日~9999年12月31日。每个日期变量都需要3字节存储,且精度为10位。 Date类型的准确性仅限于单天。
time:仅存储一天中的时间,不存储日期,它使用的是24 h时钟,因此支持的范围是00:000.00000002359:599999时分钟、秒和小数秒)。可在创建数据类型时指定小数秒的精度,默认精度是7位,准确度是100 ns(即100纳秒)。精度影响着所需的存储空间大小,范围包括最多2位的3字节、3或4位的4字节以及5-7位的5字节datetimeoffset:提供了时区信息, time数据类型不包含时区,因此仅适用于当地时间。然而,在全球经济形势下,常常需要知道某个地区的时间与另一地区的时间之间的关系。时区偏移值表示为士hh:mm。时间组件的精度指定为与Time数据类型一样,并且如果未指定则默认为同样的7位,支持的范围也相同。
datetime2:原始datetime类型的扩展,它支持更大的日期范围以及更细的小数秒精度,同时可使用它来指定精度。datetime2类型的日期范围是0001年1月1日9999年12月31日(原始**datetime**的范围则是1753年1月1日9999年12月31日)。与time类型一样,提供了7位小数秒精度。
#4)字符数据类型
char:其定义形式为char(n) ,当用char数据类型存储数据时,每个字符和符号占用1字节的存储空间。 n表示所有字符所占的存储空间,n的取值为1~8000.
varchar:其定义形式为varchar(n),用varchar数据类型可以存储可变长度字符串,n表示所有字符所占的最大存储空间,n的取值为1~8000,和char类型不同的是,varchar类型的存储空间是根据存储在表的每一列值的字符数变化的。
text:用于存储文本数据,其容量理论上为1~2"-1 (2.147.483,647)字节,但实际应用时要根据硬盘的存储空间而定。
#5) Unicode 字符数据类型
nchar:其定义形式为nchar(z),它与char数据类型类似,不同的是nchar数据类型n的取值为1~4000, Nchar数据类型采用Unicode标准字符集**,Unicode标准用2字节为一个存储单位,其一个存储单位的容纳量就大大增加了,可以将全世界的语言文字都囊括,在一个数据列中就可以同时出现中文、英文、法文等,而不会出现编码冲突nvarchar:其定义形式为nvarchar(n),它与varchar**数据类型相似.nvarchar数据类型也采用Unicode标准字符集,n的取值范围为1-4000
ntext:与text数据类型类似,存储在其中的数据通常是直接能输出到显示设备上的字符,显示设备可以是显示器、窗口或者打印机, ntext数据类型采用Uncode标准子符损库实用数程集,因此其理论上的容量为2"-1(1.073,741.823)字节。
#6)二进制字符数据类型
binary:其定义形式为binary(n).数据的存储长度是固定的,即n+4字节,当输入的二进副数据长度小于n时,余下部分填充0。二进制数据类型的最大长度(n的最大值)为8000,常用于存储图像等数据。
varbinary:其定义形式为varbinary(n),数据的存储长度是变化的,它为实际所输入数据的长度加上4字节,其他含义同binary.
image:用于存储照片、目录图片或者图画,其理论容量为2"-1(2.147.483.647)字节。其存储数据的模式与Text数据类型相同,通常存储在Image字段中的数据不能直接用Insert语句直接输人
7)空间数据类型
geography:用于处理圆地信息,圆地模型在计算时考虑了地球的曲面,位置信息是由经度和结度组成。该模型极其适合越洋运输、军事规划等应用程序以及涉及地球表面的短程应用程序。如果数据是按经度和纬度存储的,则使用此模型。在geography数据类型所使用的数据模型中,如果没有指定方向,则并不能确定多边形,因此必须准确指出方向和位置
geometry:用于处理平地或平面模型,在此模型中,将地球当成从已知点起的平面投影,平地模型不考虑地球的弯曲,因此主要用于描述较短的距离,如映射建筑物内部的数据库应用程序。
#8)其他数据类型
XML,可以存储XML,数据的数据类型,利用它可以将XMIL.实例存储在字段中或者XML.类型的变量中,注意,存储在XMI.中的数据不能超过2GB
sal variant:用于存储除文本、图形数据和timestamp类型数据外的其他任何合法的SQL Server数据,极大地方便了SQI, Server的开发工作
table:用于存储对表或者视图处理后的结果集,这种新的数据类型使得变量可以存储一个表,从而使函数或过程返回查询结果更加方便、快捷
timestamp:又称为时间截数据类型,它提供数据库范围内的唯一值,反映数据库中数据修改的相对聊序,相当于一个单调上升的计数器,当它所定义的列在更新或者插人数据行时,此列的值会被自动更新,一个计数值将自动地添加到此timestamp数据列中如果建立一个名为timestamp的列,则该列的类型将自动设为timestamp数据类型
uniqueidentifir: 用于存储一个16字节长的二进制数据类型,它是SQL. Server根据计算机网络适配器地址和CPU时钟产生的全局唯一标识符代码(GUID),此数字可以
l过调用SQL. Server的newid()函数获得,在全球各地的计算机经由此函数产生的数字不会相同
cursor,这是变量或存储过程输出参数的一种数据类型,这些参数包含对游标的引用。使用Cursor数据类型创建的变量可以为空,注意:对于CREATE TABLE语句中的列,不能使用Cursor数据类型
hierarchyid;用于均建表中数据元素之间的关系,专门代表在层次结构中的位置。lierarchyid列应非常紧凑,因为代表树中节点所需的位数取决于节点的平均子项数(i通常称为节点的扇出), hierarchyid数据类型提供了多个便于处理层次数据的方法。
##2,自定义数据类型
SQL. Server允许用户自定义数据类型,用户自定义数据类型是建立在SQI, Server系统数据类型基础上的,当用户定义一种数据类型时,需要指定该类型的名称、建立在其上的系统数据类型以及是否允许为空等。SQL. Server为用户提供了两种方法来创建自定义数据类型:①使用SQL. Server管理平台创建用户自定义数据类型:@利用系统存储过程创建用户自定义数据类型。
##3,数据类型转换
下面的示例需要用到Northwind数据库,用SSMS对象资源管理器附加数据库。
在SQL Server中,无论数据表的字段、常量、变量、表达式还是参数,都具有一个相对应的数据类型。数据类型是一种属性,用于指定对象可保存的数据类型。
1)使用CAST转换数据类型
当要对不同类型的数据进行运算时,必须将其转换成相同的数据类型才能进行运算sQl. Server 中提供了两个函数可以进行数据类型的转换,其中一个是CAST.其语法格式如下:
将表达式转换为data_type l (length) 1其中, expression为任何有效的表达式. data type为要转换的数据类型, length为数据类型的长度,一般只有在nchar,.nvarchar,char, varchar, binary和varbinary这几种数据类型才需要使用,是可选参数出来。
例 查看Northwind数据库products表中的产品及单价,并在一列中显示
use Northwind
SELECT productname. '的单价为: '+cAST (unltprice as varchar (1011 + '元,AS产品介绍
from products
致据库实用教程
例 查看Northwind数据库orders表中的订单号和订单时间,并在一列中显示出来
use Northwind
go
select cast(orderid as varchar(10)+'的时间:'+cast(orderdata as varcher()20)) as 订单时间
from orders
2)使用CONVERT转换数据类型
CONVERT函数与CAST函数类似,作用也是转换数据类型,其语法格式如下
CONVERT Idata type t (length) 1.expressionl, atyle])
语法说明如下
data_type:要转换的数据类型。
length:数据类型的长度expression:任何有效的表达式。
styl:样式,一般用于将datetime或smalldatetime数据转换为字符数据(ncharnvarchar, char. varchar数据类型)的日期格式的样式;或者用于将float. real, money或smallmoney数据转换为字符数据的字符串格式,如果style为NUL.则返回的结果画
为NDLL
日期。
例 在看Norhwind数据库orders表中的订单号,订购日期,到货日期发
use northwind
go
SEISCT orderid as 订单号,
convert (varchar (20), ordertate,1) as 订货日期,
convet (varchar (20), requireddate,102) as 到货日期
convert (varchar (20), shippeddate,103) as 发货日期
from orders
3)隐式数据类型转换
在进行不同类型的数据运算时,不一定都必须要使用CAST或CONVERT来进行数据类型转换,在SQL Server中,系统会自动将一些数据类型进行转换,这种转换称为隐式转换,而用CAST或CONVERT转换数据类型称为显式转换。
例 查看Northwind数据库products表中产品库存量所值的资金。
use northwind
go
SELECT productname, unitprice* unitsinstock AS 资产
from products
例 查看Northwind数据库order details表中每个订单的总金额
use northwind
go
SELECT orderid As 编号,sum (unitprice" quantity) AS 总金额
FROM [order details]
GROUP BY orderid