第6章数据类型.docx
《第6章数据类型.docx》由会员分享,可在线阅读,更多相关《第6章数据类型.docx(16页珍藏版)》请在冰豆网上搜索。
![第6章数据类型.docx](https://file1.bdocx.com/fileroot1/2023-5/21/f3bc3001-dedd-4d6f-a07d-508e7b5546e4/f3bc3001-dedd-4d6f-a07d-508e7b5546e41.gif)
第6章数据类型
第4章数据类型
教学目标
●理解数据类型的分类和主要的数据类型的特点,
●理解Unicode数据类型和大值数据类型
4.1数据类型
●MicrosoftSQLServer2005系统提供了28种数据类型。
这些数据类型可以分为数字数据类型、字符数据类型、日期和时间数据类型、二进制数据类型以及其他数据类型。
展开数据库->可编程性->类型
4.1.1数字数据类型
●使用数字数据的数据类型被称为数字数据类型。
这些数据类型的数字可以参加各种数学运算。
●精确数字
(1)bigint,int,smallint,tinyint
整型常量以没有用引号括起来并且不包含小数点的数字串来表示。
integer常量必须全部为数字;它们不能包含小数。
Eg:
12,-324
(2)bit
可以取值为1、0或NULL的整数数据类型。
字符串值TRUE和FALSE可以转换为以下bit值:
TRUE转换为1,FALSE转换为0。
bit常量使用数字0或1表示,并且不括在引号中。
如果使用一个大于1的数字,则该数字将转换为1。
--验证bit类型的使用
(1)创建表test
createtabletest(colabit)
(2)向表test中插入数据
insertintotestvalues(123)
insertintotestvalues(-123)
insertintotestvalues(-0.123)
insertintotestvalues(0)
(3)查看表test中的数据
select*fromtest
(3)decimal和numeric
由整数和小数部分构成,所有的数字都是有效位,能够以完成的精度存储十进制。
2者等价。
表达方式:
decimal(p,s)ornumeric(p,s)
其中:
p代表精度,表示可以存储数据的总位数,包括小数点左边和右边的位数。
范围为1-38,默认为18;
s代表小数点右边数字的个数,范围0~p,默认为0.
例如:
Decimal(5,2):
表示数据共5个数字,小数点后面2位,则小数点前面有(5-2)3位。
能表示的最大数据为999.99。
Eg:
createtabletest
(adecimal(5,2))
insertintotestvalues(32.456);
insertintotestvalues(59.9);
insertintotestvalues(1000);
分析:
存储到数据库中的数据。
(4)money和smallmoney
代表货币值的数据类型
常量前面可以带有$,例如$12.34
createtabletest
(amoney)
insertintotestvalues($32.456);
insertintotestvalues(59900);
select*fromtest
droptabletest
●近似数字类型
用于表示浮点数值数据的近似数值数据类型。
浮点数据为近似值,因此,并非数据类型范围内的所有值都能精确地表示。
float和real常量使用科学记数法来表示。
101.5E5
0.5E-2
4.1.2datetime和smalldatetime数据类型
常量使用特定格式的字符日期值来表示,并被单引号括起来。
例如:
createtabletest
(adatetime)
insertintotestvalues('');
insertintotestvalues('')
insertintotestvalues('2010-03-15')
insertintotestvalues('2010/03/15')
select*fromtest
insertintotestvalues('2010/03/158:
8:
8')
insertintotestvalues('2010/03/1521:
18:
58')
droptabletest
4.1.3字符数据类型
字符数据类型用于存储固定长度或可变长度的字符数据。
在MicrosoftSQLServer2005系统中,提供了char、varchar、text、nchar、nvarchar、ntext等6种数据类型。
前3种数据类型是非Unicode字符数据,后3种是Unicode字符数据
(1)Char、varchar和text
固定长度或可变长度的字符数据类型。
char[(n)]
固定长度,非Unicode字符数据,长度为n个字节。
n的取值范围为1至8,000,存储大小是n个字节。
eg:
char(5)
如果数据没有达到定义长度时,系统自动补空格。
varchar[(n|max)]
可变长度,非Unicode字符数据。
n的取值范围为1至8,000。
max指示最大存储大小是2^31-1个字节。
存储大小是输入数据的实际长度加2个字节。
所输入数据的长度可以为0个字符。
Text
同varchar(max)相同,表示8000个字符以上的字符串。
未来版本将要取消此类型。
注意:
(1)如果未在数据定义或变量声明语句中指定n,则默认长度为1
(2)如果列数据项的大小一致,则使用char。
(3)如果列数据项的大小差异相当大,则使用varchar。
(4)如果列数据项大小相差很大,而且大小可能超过8,000字节,请使用varchar(max)。
字符串常量
字符串常量括在单引号内并包含字母数字字符(a-z、A-Z和0-9)以及特殊字符,如感叹号(!
)、at符(@)和数字号(#)。
如果单引号中的字符串包含一个嵌入的引号,可以使用两个单引号表示嵌入的单引号。
对于嵌入在双引号中的字符串则没有必要这样做。
以下是字符串的示例:
'Cincinnati'
'O''Brien'
'ProcessXis50%complete.'
'Thelevelforjob_id:
%dshouldbebetween%dand%d.'
(2)ncharnvarcharntext
例如,有一个必须处理三种主要语言的北美洲客户的数据库:
∙墨西哥使用的西班牙语名称和地址
∙魁北克使用的法语名称和地址
∙加拿大其余地区和美国使用的英语名称和地址
当只使用字符列和代码页时,必须小心以确保与数据库一起安装的代码页能处理所有这三种语言的字符。
另外,还必须小心保证当运行某种语言的代码页的客户端读取另一种语言的字符时,能够正确转换字符。
支持国际化客户端的数据库应始终使用Unicode数据.
Unicode是统一字符编码标准,为了数据库中存储多国语言而制定。
存储Unicode数据时每个字符使用2个字节,而不是每个字符1个字节。
nchar[(n)]
n个字符的固定长度的Unicode字符数据。
n值必须在1到4,000之间(含)。
nvarchar[(n|max)]
可变长度Unicode字符数据。
n值在1到4,000之间(含)。
max指示最大存储大小为2^31-1字节。
存储大小是所输入字符个数的两倍+2个字节。
所输入数据的长度可以为0个字符。
常量
Unicode字符串的格式与普通字符串相似,但它前面有一个N标识符
createtabletest1
(achar(3))
insertintotest1values('ab')
insertintotest1values('我们')
createtabletest2
(anchar(3))
insertintotest2values('ab')
insertintotest2values(N'我们');
select*fromtest1
select*fromtest2
droptabletest1
droptabletest2
4.1.4二进制数据类型
二进制类型用于存储声音、图片或者多媒体数据。
包括binary、varbinary、image等3种数据类型。
在MicrosoftSQLServer2005系统中,微软公司建议使用varbinary(max)代替image数据类型
常量
二进制常量具有前辍0x并且是十六进制数字字符串。
这些常量不使用引号括起。
例:
0x12Ef
0x69048AEFDD010E
0x(emptybinarystring)
4.1.5其他数据类型
●除了前面介绍的数据类型之外,MicrosoftSQLServer2005系统还提供了cursor、sql_variant、table、timestamp、uniqueidentifier、xml等数据类型。
使用这些数据类型可以完成对特殊数据对象的定义、存储和使用。
(1)timestamp
公开数据库中自动生成的唯一二进制数字的数据类型。
timestamp通常用作给表行加版本戳的机制。
存储大小为8个字节。
注意
(1)timestamp的列名可省
(2)一个表中只能有一个timestamp类型的列
(3)对行的任何更新都会更改timestamp值
Eg:
createtabletest
(aint,btimestamp);
insertintotest(a)values
(1);
insertintotest(a)values
(2);
insertintotest(a)values(3);
修改数据
updatetestseta=4wherea=1
观察timestamp列值的变化
select*fromtest
droptabletest
(2)uniqueidentifier
创建一个uniqueidentifier类型的唯一值。
createtabletest
(GuidColuniqueidentifier,
NumColint)
insertintotest
Values(NEWID(),4)
select*fromtest
4.2用户自定义数据类型
用户自定义数据类型是基于sqlserver基本数据类型构造的。
当几个表中必须存储同一种数据类型并且需要有相同的长度和可空性时,可以使用自定义数据类型。
创建自定义数据类型时,必须给定3个参数:
数据类型的名称,基类型,是否为空
(1)在SSMS中自定义类型
展开数据库->可编程性->类型->右击用户定义类型
打开如下窗口:
(2)通过系统存储过程
系统存储过程sp_addtype可用来创建用户自定义数据类型,语法如下:
Sp_addtype新数据类型名,系统数据类型,是否为空
是否唯恐必须用单引号引起来,如’null’,’notnull’
例:
创建一个uname用户自定义数据类型,基类型为变长为8的字符串。
sp_addtypeuname,'varchar(8)','notnull'
删除用户自定义类型
(1)
(2)
Sp_droptype数据类型名
例如:
sp_droptypeuname
数据类型的转换函数
Convert
Cast
使用方法:
【例】如何得到上个月的最后一天
思路:
(1)先得到当月第一天
convert(char(7),getdate(),111)+'/01'
(2)再将得到的字符串转换成日期时间后减1
selectconvert(datetime,convert(char(7),getdate(),111)+'/01')-1
总结:
精确数字
bigint
decimal
int
numeric
smallint
money
tinyint
smallmoney
bit
近似数字
float
real
日期和时间
datetime
smalldatetime
字符串
char
text
varchar
Unicode字符串
nchar
ntext
nvarchar
二进制字符串
binary
image
varbinary
其他数据类型
cursor
timestamp
sql_variant
uniqueidentifier
table
xml