1、第第6章章 T-SQL语言概述语言概述主讲教师:卫琳6.1 T-SQL语言概述语言概述6.1.1 T-SQL语言的发展过程和特点语言的发展过程和特点6.1.2 T-SQL语言的分类语言的分类数据定义语言数据定义语言(DDL)数据操纵语言数据操纵语言(DML)数据控制语言数据控制语言(DCL)语句语句功能功能create创建数据库或数据库对象创建数据库或数据库对象alter修改数据库或数据库对象修改数据库或数据库对象drop删除数据库或数据库对象删除数据库或数据库对象语句语句功能功能select从表或视图中检索数据从表或视图中检索数据insert将数据插入到表或视图中将数据插入到表或视图中upd
2、ate修改表或视图中的数据修改表或视图中的数据delete从表或视图中删除数据从表或视图中删除数据语句语句功能功能grant授予权限授予权限revoke收回权限收回权限drop禁止从其他角色中继承许可权限禁止从其他角色中继承许可权限DDLDMLDCL6.1.3 T-SQL法约定法约定1.注释注释“”:单行注释(从双连字符到行尾的内容):单行注释(从双连字符到行尾的内容)/*/:多行注释(对:多行注释(对/*/之间所有内容)之间所有内容)2.系统保留字系统保留字不要使用保留关键字作为对象名称或标识符不要使用保留关键字作为对象名称或标识符/*创建名为创建名为example的数据库,并存放在的数据库
3、,并存放在“e:sql”目录中目录中*/CREATE DATABASE exampleON(name=example,-设置数据库文件名称设置数据库文件名称 filename=e:sqlexample.mdf,-设置文件存放位置设置文件存放位置 size=10,-指定文件大小指定文件大小 maxsize=50)-指定文件的最大容量指定文件的最大容量LOG ON-指定日志文件指定日志文件(name=examplog,-指定日志文件名称指定日志文件名称 filename=e:sqlexample.ldf,-指定日志文件存放位置指定日志文件存放位置 size=5mb,maxsize=25mb,fil
4、egrowth=5mb)go6.2 附加的语言元素附加的语言元素6.1.2 标识符标识符1.标识符格式标识符格式(1)标识符的首字符必须是下列字符之一)标识符的首字符必须是下列字符之一。l 统一码(统一码(Unicode)2.0标准中所定义的字母,包括拉丁字母标准中所定义的字母,包括拉丁字母a-z和和A-Z,以及来自其他语言的字符。以及来自其他语言的字符。l 下划线下划线“_”、符号、符号“”或者数字符号或者数字符号“#”。(2)标识符的后续字符可以是以下)标识符的后续字符可以是以下3种。种。l 统一码(统一码(Unicode)2.0标准中所定义的字母。标准中所定义的字母。l 来自拉丁字母或其
5、他国家来自拉丁字母或其他国家/地区脚本的十进制数字。地区脚本的十进制数字。l “”符号、美元符号符号、美元符号“$”、数字符号、数字符号“#”或下划线或下划线“_”。(3)标识符不允许是)标识符不允许是Transact-SQL的保留字。的保留字。(4)不允许嵌入空格或其他特殊字符。)不允许嵌入空格或其他特殊字符。6.1.2 标识符标识符2标识符分类标识符分类SQL Server将标识符分为以下两种类型:将标识符分为以下两种类型:l 常规标识符:符合标识符的格式规则。常规标识符:符合标识符的格式规则。l 分隔标识符:包含在双引号分隔标识符:包含在双引号(“”)或者方括号或者方括号()内的标识符。
6、内的标识符。该标识符可以不符合标识符的格式规则,如该标识符可以不符合标识符的格式规则,如MR GZGLXT、MR和和GZGLXT之间含有空格,但因为使用了方括号,所以视为分隔之间含有空格,但因为使用了方括号,所以视为分隔标识符。标识符。注意:常规标识符和分隔标识符包含的字符数必须在注意:常规标识符和分隔标识符包含的字符数必须在1128之间,对于本地临时表,标识符最多可以有之间,对于本地临时表,标识符最多可以有116个字符。个字符。6.2.2 常量常量(1)字符型常量字符型常量lASCII字符串常量:用单引号括起来,由字符串常量:用单引号括起来,由ASCII字符组成。字符组成。如果在字符常量中已
7、经包含了一个单引号,那么可以使如果在字符常量中已经包含了一个单引号,那么可以使用两个单引号表示这个带单引号的字符。用两个单引号表示这个带单引号的字符。lUnicode字符串常量的格式与字符串常量的格式与ASCII字符串常量相似,但它字符串常量相似,但它前面有一个前缀前面有一个前缀N,而且,而且N前缀必须是大写的。前缀必须是大写的。如:如:NSQL Server、N张三张三、N计算机科学与技计算机科学与技术术。6.2.2 常量常量(2)数值型常量数值型常量数值型常量包含整型常量和实数型常量。数值型常量包含整型常量和实数型常量。l整型常量整型常量(Integer)用来表示整数。可细分为二进制整用来
8、表示整数。可细分为二进制整型常量、十六进制整型常量和十进制整型常量。二进制型常量、十六进制整型常量和十进制整型常量。二进制整型常量以数字整型常量以数字0或或1表示;十六进制整型常量由前缀表示;十六进制整型常量由前缀0 x后跟十六进制数组成;十进制整型常量即不带小数点的后跟十六进制数组成;十进制整型常量即不带小数点的十进制数;十进制数;l实数型常量用来表示带小数部分的数,有定点数和浮实数型常量用来表示带小数部分的数,有定点数和浮点数两种表示方式,其中浮点数使用科学记数法来表示。点数两种表示方式,其中浮点数使用科学记数法来表示。如如:0.3E-5。(3)日期时间型常量日期时间型常量(datetim
9、e)日期时间型常量使用特定格式的字符日期值来表示,日期时间型常量使用特定格式的字符日期值来表示,并且用单引号括起来。如并且用单引号括起来。如2009年年4月月1日可以用以下日可以用以下方式表示:方式表示:April 1,2009、04/01/2009或或20090401。(4)货币型常量货币型常量(money)货币型常量以前缀货币型常量以前缀“$”作为标识。如作为标识。如$123.45。6.2.2 变量变量(1)变量名称)变量名称在在SQL Server 2008系统中系统中,变量的命名规则如下:,变量的命名规则如下:l第一个字符必须是字母、数字、下画线或第一个字符必须是字母、数字、下画线或符
10、号。需要注意的是,符号符号。需要注意的是,符号“”开头的变量表示局部变量、符号开头的变量表示局部变量、符号“”开头的变量表示全局变量。开头的变量表示全局变量。l变量名不能是变量名不能是T-SQL语言的系统保留字语言的系统保留字(如如IF、ELSE、CONTINUE等等),包括,包括大写和小写形式。大写和小写形式。l变量名中不允许出现空格或其他特殊字符。变量名中不允许出现空格或其他特殊字符。根据以上规则,下列变量名都是合法的:根据以上规则,下列变量名都是合法的:a2、abc、student_3和和average。变量在使用中需要先声明再使用,声明变量用变量在使用中需要先声明再使用,声明变量用DE
11、CLARE语句,其语法格式如语句,其语法格式如下:下:DECLARE 变量名称变量名称 变量的数据类型变量的数据类型,n说明:说明:为表示局部变量,变量名称的第一个字符必须是为表示局部变量,变量名称的第一个字符必须是所有变量在声明后均设置初值为所有变量在声明后均设置初值为NULL6.2.2 变量变量(2)变量赋值)变量赋值有两种为变量赋值的方式:使用有两种为变量赋值的方式:使用SET语句直接为变量赋值和使用语句直接为变量赋值和使用SELECT语句选择表中的值来为变量赋值。语句选择表中的值来为变量赋值。语法格式如下:语法格式如下:l格式格式1:使用:使用SET语句赋值语句赋值SET 变量名称变量
12、名称=表达式表达式l格式格式2:使用:使用SELECT语句赋值语句赋值SELECT 变量名称变量名称=表达式表达式,n说明:说明:表达式可以是任何有效的表达式可以是任何有效的SQL表达式;表达式;一个一个SELECT语句可以给多个变量赋值,而一个语句可以给多个变量赋值,而一个SET语句一次只能给一个语句一次只能给一个变量赋值。变量赋值。例:用赋值语句分别定义两个整型变量x和y。使x的值为20,y的值为5,计算并显示x,y,3x+4y,xy,和x/y的值。declare x int,y intset x=20set y=5select x,y,3*x+4*y,x*y,x/y例:创建两个局部变量,
13、并赋值,然后输出变量的值。declare var1 char(4),var2 char(20)set var1=中国set var2=var1+是一个伟大的国家select var1,var2go示例:创建一个名为示例:创建一个名为sex的局部变量,并在的局部变量,并在select语句中语句中使用该局部变量查找表使用该局部变量查找表student中所有女同学的信息。中所有女同学的信息。use xscj2005declare xb char(2)set xb=女select*from studentwhere ssex=xb例:使用查询给变量赋值。例:使用查询给变量赋值。use XSCJ2005
14、godeclare xm varchar(8)set xm=(select sname from student where sno=2008056103)select xmGouse XSCJ2005godeclare xm varchar(8)select xm=sname from studentselect xmGo说明:如果返回多个值,将返回的最后一个值赋给变量说明:如果返回多个值,将返回的最后一个值赋给变量例:use XSCJ2005godeclare xm varchar(8)select xm=刘丰select xm=sname from studentwhere sno=12
15、3456789select xm as namego说明:如果说明:如果select语句没有返回行,变量将保留当前值语句没有返回行,变量将保留当前值6.3 运算符和表达式运算符和表达式SQL Server 2008提供以下几类运算符:算术运算符、关系运算符、逻辑运算符、字符运算符和位运算符。6.3.1 算术运算符算术运算符算术运算符对两个表达式执行数学运算。算术运算符算术运算符说说 明明+加法运算加法运算-减法运算减法运算*乘法运算乘法运算/除法运算,如果两个表达式都是整数,则结果是整数,小数除法运算,如果两个表达式都是整数,则结果是整数,小数部分被截断部分被截断%(求模求模)求模求模(求余求
16、余)运算,返回两数相除后的余数运算,返回两数相除后的余数算术运算符算术运算符例【6-3】:计算6/5、6.0/5.0、5/6、5.0/6.0与6%5的值。select 6/5,6.0/5.0,0,5.0/6.0,6%5select 14/5,6.0/5.0,0,5.0/6.0,6%5select 6.0/5,6.0/5.0,0,5.0/6.0,6%5通过执行语句我们注意到:6/5的结果为1,而6.0/5.0的结果为1.200000,两者运算结果并不相同。原因在于当两个具有相同数据类型的数进行算术运算时,运算结果依然是当前的数据类型。但是,当两个不同数据类型的数进行算术运算时,数据类型优先级规则
17、指定将优先级较低的数据类型转换为优先级较高的数据类型。这样能够在最大程度上保护运算结果的正确性和合理性。同样,5/6与5.0/6.0的运算结果也不相同。6.3.2 关系运算符关系运算符关系运算符说 明实 例=相等姓名=”王华”大于成绩85小于年龄=大于等于成绩=60=小于等于工资=2000、!=不等于所属院系英语系!不小于学分!不大于成绩!=100说明:说明:l两个数值型数据比较时,按照值的大小直接比较;两个数值型数据比较时,按照值的大小直接比较;l两个日期时间型数据比较时,按照年、月、日的先后顺序比较;两个日期时间型数据比较时,按照年、月、日的先后顺序比较;l两个字符型数据比较时,英文字母按
18、照两个字符型数据比较时,英文字母按照ASCII码值大小比较,汉字按照拼音先后码值大小比较,汉字按照拼音先后顺序比较。顺序比较。use XSCJgodeclare student char(6)set student=001111if(student0)select*from xs where 学号=student6.3.3 逻辑运算符逻辑运算符运 算 符运 算 规 则AND与运算,两个操作数均为TRUE时,结果才为TRUEOR或运算,若两个操作数中任何一个为TRUE,则结果为TRUENOT非运算,单目运算,结果值取反ALL每个操作数值都为TRUE时,结果为TRUEANY多个操作数中只要有一个为
19、TRUE,结果为TRUEBETWEEN若操作数在指定的范围内,则运算结果为TRUEEXISTS若子查询包含一些行,则运算结果为TRUEIN若操作数值等于表达式列表中的一个,则结果为TRUELIKE若操作数与某种模式相匹配,则结果为TRUESOME若在一系列操作数中,有些值为TRUE,则结果为TRUE例:查询成绩高于李明最高成绩的学生姓名、课程名和成绩select sname,cname,gradefrom student join sc join courseon o=oon student.sno=sc.snoand gradeall(select grade from student jo
20、in sc join course on o=o on student.sno=sc.sno and sname=李明)1)any,all例:查询成绩高于李明最低成绩的学生姓名、课程名和成绩select sname,cname,gradefrom student join sc join courseon o=oon student.sno=sc.snoand gradeany(select grade from student join sc join course on o=o on student.sno=sc.sno and sname=李明)2).Between例:查询例:查询91及
21、及92年出生的学生信息年出生的学生信息select*from studentwhere sbirth between 1991-1-1 and 1992-12-31例:查询不是例:查询不是91、92年出生的学生信息年出生的学生信息select*from studentwhere sbirth not between 1991-1-1 and 1992-12-31查询姓王或姓刘的学生信息select*from studentwhere sname like 王刘%查询不姓王也不姓刘的学生信息select*from studentwhere sname like 王刘%通配符通配符说明说明%代表代
22、表0个或多个字符个或多个字符_代表单个字符代表单个字符 指定范围(如:指定范围(如:a-f、0-9或集合或集合abcdef中的任何单个字符中的任何单个字符指定不属于范围(如:指定不属于范围(如:a-f、0-9或集合或集合abcdef中的任何中的任何单个字符单个字符3).Like查询所有选课的学生信息查询所有选课的学生信息select*from studentwhere exists(select*from sc where sno=student.sno)查询没有选课的学生信息查询没有选课的学生信息select*from studentwhere not exists(select*from
23、sc where sno=student.sno)4.exists6.3.4 字符运算符字符运算符 字符运算符只有一个字符运算符只有一个“+”,又称为字符串串联运算符。,又称为字符串串联运算符。字符串之间通过字符串之间通过“+”实现字符串的连接。实现字符串的连接。select 8899+7788select 8899+7788select 8899+7788说明:当数据类型不相同说明:当数据类型不相同时,转换成优先级别高的。时,转换成优先级别高的。6.3.5 位运算符位运算符 位运算符在两个表达式之间实现按位操作,这两个表达式应该为位运算符在两个表达式之间实现按位操作,这两个表达式应该为整型数
24、据类型或与整型兼容的数据类型(如字符型等,但不能是整型数据类型或与整型兼容的数据类型(如字符型等,但不能是image类型类型)运 算 符运 算 法 则&(位与运算)两个参与运算的位值均为1时,结果位为1,否则为0|(位或运算)两个参与运算的位中只要有一位值为1,结果就为1,否则为0(位异或运算)两个参与运算的位中只有一个的值为1时(不可以两个值都为1),结果为1;只有当两个参与运算的位值都为0或都为1时,结果才为06.3.5 位运算符位运算符示例:示例:select 128&129,128|129,128129运 算 符运 算 法 则&(位与运算)两个参与运算的位值均为1时,结果位为1,否则为
25、0|(位或运算)两个参与运算的位中只要有一位值为1,结果就为1,否则为0(位异或运算)两个参与运算的位中只有一个的值为1时(不可以两个值都为1),结果为1;只有当两个参与运算的位值都为0或都为1时,结果才为0128:129:1000 00001000 0001或或|1000 0001128:129:1000 00001000 0001与与&|1000 0000128:129:1000 00001000 0001异或异或0000 0001优 先 级运 算 符1一目运算:+(正)、-(负)、(按位取反)2*(乘)、/(除)、%(取模)3+(加)、+(字符串连接)、-(减)4=、=、=、!=、!、!
26、yprint x大于yelseprint x小于或等于y6.4 流程控制语句流程控制语句6.4.2 IF ELSE语句语句IF 条件表达式语句体1ELSE语句体2例:输入一个坐标值,判断其在哪一个象例:输入一个坐标值,判断其在哪一个象限限declare x int,y intset x=8set y=-3if x0if y0print xy位于第一象限位于第一象限elseprint xy位于第四象限位于第四象限elseif y0print xy位于第二象限位于第二象限elseprint xy位于第三象限位于第三象限IF.ELSE语句语句例例【6-6】:设定变量:设定变量score,根据,根据s
27、core的值的值判断成绩是否合格,并输出结论。判断成绩是否合格,并输出结论。declare score int,a nchar(10)set score=55if score=60set a=N成绩合格elseset a=N成绩不合格select a1.简单简单case语句语句l计算 input_expression,然后按指定顺序对每个when子句的input_expressionwhen_expression进行计算。l返回第一个取值为true的input_expression=when_expression的result_expression.l如果没有取值为true的input_exp
28、ression=when_expression,则当指定else子句时,sql server将返回else_result_expression;若没有指定else子句时,则返回null值。2.Case 搜索语句搜索语句l按指定顺序为每个when子句的Boolean_expression求值。l返回第一个取值为true的Boolean_expression的result_expression。l如果没有取值为true的Boolean_expression,则当指定else子句时,sql server将返回else_result_expression;若没有指定else子句时,则返回null值。6
29、.4.3 case 语句语句-简单Case语句 CASE sex WHEN 1 THEN 男 WHEN 2 THEN 女 ELSE 其他 END-Case搜索语句 CASE WHEN sex=1 THEN 男 WHEN sex=2 THEN 女 ELSE 其他 END 简单Case语句只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。-比如说,下面这段SQL,你永远无法得到“第二类”这个结果 CASE WHEN col_1 IN(a,b)THEN 第一类 WHEN col_1 IN(a)THEN 第二类 ELSE其他 END select sno,cno,grade,case whe
30、n grade=90 then 优秀优秀when grade=80 then 良好良好when grade=70 then 中等中等when grade=60 then 及格及格when grade60 then 不及格不及格end as 成绩等级成绩等级from sc1.简单简单Case 语句语句6.4.3 case 语句语句2.Case 搜索语句搜索语句例例6-7:create table temp(score int not null)insert into temp values(60)insert into temp values(30)insert into temp values
31、(90)insert into temp values(106)insert into temp values(87)select score,等级等级=case when score=60 and score=80 and score=90 and score=0 and 成绩成绩=60 and 成绩成绩=70 and 成绩成绩=80 and 成绩成绩=90 and 成绩成绩=100 then 优秀优秀endfrom scgoselect*from v6.4.4 goto语句语句无条件转移语句,使用无条件转移语句,使用goto语句可以将执行流程转移到标签指语句可以将执行流程转移到标签指定的位
32、置。为了与前面的版本兼容,定的位置。为了与前面的版本兼容,SQL SERVER 2008 支持支持goto语句,语句,但由于该语句破坏了语句的结构,容易引发不易发现的问题,所以应该但由于该语句破坏了语句的结构,容易引发不易发现的问题,所以应该尽量减少或避免使用。尽量减少或避免使用。declare x intset x=1loving:print xselect x=x+1while x=3goto loving说明:标号是GOTO目标,它不仅仅标识了跳转目标,标号不隔离其前后语句。执行标号前面语句的用户跳过标号并执行标号后的语句。除非标号前面的语句本身是控制流语句(return),这种情况才发
33、生。declare pjf floatif(select COUNT(*)from scwhere sno=2007056101)=0goto labelelsebeginselect pjf=AVG(grade)from scwhere sno=2007056101print pjfendlabel:print 无学生或此学生没有选课!示例:输出2007056101号学生平均成绩,若此学生没有选课,则显示相应提示信息,用goto完成。说明:标号是GOTO目标,它不仅仅标识了跳转目标,标号不隔离其前后语句。执行标号前面语句的用户跳过标号并执行标号后的语句。除非标号前面的语句本身是控制流语句(r
34、eturn),这种情况才发生。6.4.5 whilebreak和和continue 语句语句1.while 语句语句declare s int,num intselect s=0,num=1while num=100beginset s=s+numset num=num+1endprint 1+2+3+.+100=+convert(char,s)godeclare x intset x=1while x=3beginprint xselect x=x+1end6.4.5 whilebreak和和continue 语句语句2.break 语句语句 break 语句一般用在语句一般用在while循
35、环或循环或if.else语句中,用于退出本层循环。语句中,用于退出本层循环。例:求例:求1100之间的累加和,当和超过之间的累加和,当和超过1000时停止累加,显示累加和以及累时停止累加,显示累加和以及累加到的位置。加到的位置。declare i int,s intset i=1set s=0while i=1000breakset i=i+1endselect s as s,i as i6.4.5 whilebreak和和continue 语句语句3.continue 语句语句continue 命令可以让程序跳过命令可以让程序跳过continue命令之后的语句,命令之后的语句,回到回到whi
36、le循环的第一行命令。循环的第一行命令。Break则让程序完全跳出循则让程序完全跳出循环,结束环,结束while命令的执行。命令的执行。例:求例:求110之间的偶数和,并用之间的偶数和,并用continue控制语句的输出。控制语句的输出。declare x int,sum intset x=1set sum=0while x0print 遇到return之前returnprint 遇到return之后SQL SERVER2005新增功能新增功能 try.catch语句语句Bgein try语句语句块语句语句块End tryBegin catch语句语句块语句语句块End catch 类似类似C
37、+的异常处理,当执行的异常处理,当执行try语句块中的代码出语句块中的代码出现错误时,系统将把控制传递到现错误时,系统将把控制传递到catch语句块进行处理。语句块进行处理。begin trycreate database testend trybegin catchprint test数据库已存在drop database testprint 原有的test数据库已删除create database testprint test数据库再次成功创建end catch6.5 函数函数6.5.1 数学函数数学函数数数 学学 函函 数数功功 能能ABS(数值表达式数值表达式)绝对值函数,返回数值表达
38、式的绝对值绝对值函数,返回数值表达式的绝对值ACOS(实型表达式实型表达式)反余弦函数,返回一个余弦值对应的角度。角度以弧度表示,反余弦函数,返回一个余弦值对应的角度。角度以弧度表示,实型表达式取值范围从实型表达式取值范围从-11,若参数超过此范围,函数返回,若参数超过此范围,函数返回NULL并报告错误并报告错误COS(数值表达式数值表达式)正弦函数,返回表达式中以弧度表示的指定角的余弦值正弦函数,返回表达式中以弧度表示的指定角的余弦值EXP(数值表达式数值表达式)指数函数,返回表达式的指数值指数函数,返回表达式的指数值LOG(数值表达式数值表达式)自然对数函数,返回表达式的自然对数值自然对数
39、函数,返回表达式的自然对数值PI()圆周率函数,返回圆周率函数,返回14位小数的圆周率常量值位小数的圆周率常量值RAND()随机函数,随机返回随机函数,随机返回01之间的之间的float数值数值SIGN(数值表达式数值表达式)符号函数,返回表达式的正号、零或负号符号函数,返回表达式的正号、零或负号SIN(数值表达式数值表达式)正弦函数,返回表达式中以弧度表示的指定角的正弦值正弦函数,返回表达式中以弧度表示的指定角的正弦值SQRT(数值表达式数值表达式)平方根函数,返回表达式的平方根平方根函数,返回表达式的平方根TAN(数值表达式数值表达式)正切函数,返回指定表达式中以弧度表示的指定角的正切值正
40、切函数,返回指定表达式中以弧度表示的指定角的正切值例【6-8】:使用常用数学函数计算-1的绝对值,e的10次方,5的自然对数,半径为3的圆的面积和49的平方根。SELECT N-1绝对值=ABS(-1),Ne的10次方=EXP(10),N5的自然对数=LOG(5),N半径为3的圆的面积=PI()*3*3,N49的平方根=SQRT(49)6.5.2 字符串函数字符串函数字符串函数字符串函数功功 能能ASCII(字符表达式字符表达式)ASCII函数,返回字符串表达式中最左端字符的函数,返回字符串表达式中最左端字符的ASCII码值码值CHAR(整型表达式整型表达式)ASCII码转换函数,参数为介于码
41、转换函数,参数为介于0255之间的整数,返回整数之间的整数,返回整数的的ASCII码码LEFT(字符表达式,字符表达式,n)左子串函数,返回从字符串左边开始的左子串函数,返回从字符串左边开始的n个字符个字符LEN(字符表达式字符表达式)字符串长度函数,返回字符串表达式中字符的个数字符串长度函数,返回字符串表达式中字符的个数LOWER(字符表达式字符表达式)小写字母函数,将大写字母转换为小写字母,返回表达式的小写字母函数,将大写字母转换为小写字母,返回表达式的小写字母表示小写字母表示LTRIM(字符表达式字符表达式)删除前导空格函数,返回删除了前导空格的字符表达式删除前导空格函数,返回删除了前导
42、空格的字符表达式REPLACE(字符表达式字符表达式1,字符表达式字符表达式2,字符表达,字符表达式式3)字符替换函数,用第三个表达式替换第一个字符串表达式中字符替换函数,用第三个表达式替换第一个字符串表达式中包含的所有第二个字符表达式,并返回替换后的表达式包含的所有第二个字符表达式,并返回替换后的表达式RIGHT(字符表达式,字符表达式,n)右子串函数,返回从字符串右边开始的右子串函数,返回从字符串右边开始的n个字符个字符RTRIM(字符表达式字符表达式)删除尾随空格函数,返回删除所有尾随空格的字符表达式删除尾随空格函数,返回删除所有尾随空格的字符表达式STR(数值表达式数值表达式,长,长度
43、度n,小数位,小数位)数字向字符转换函数,返回由数字转换过来的字符串,长度数字向字符转换函数,返回由数字转换过来的字符串,长度用于指定总长度,包括小数点,小数位指小数点右边的位数用于指定总长度,包括小数点,小数位指小数点右边的位数UPPER(字符表达式字符表达式)大写字母函数,返回指定表达式的大写字母表示大写字母函数,返回指定表达式的大写字母表示例【6-9】:使用常用字符串函数计算A的ASCII码,SQL Server的前3个字符,数据库原理字符串的长度,将China转换为大写字母,将英语四级改为英语六级。T-SQL语句如下:SELECT NA的ASCII=ASCII(A),NSQL Serv
44、er的前3个字符=LEFT(SQL Server,3),N数据库原理的长度=LEN(N数据库原理),N将China转换为大写字母=UPPER(China),N将英语四级改为英语六级=REPLACE(N英语四级,N四,N六)declare s varchar(50)set s=北京,欢迎您!select right(s,4)+left(s,2)将将北京北京,欢迎您欢迎您!变成变成欢迎您欢迎您!北京北京select ASCII(loving)/*返回最左端字符的返回最左端字符的ascii码值码值Len用于返回指定字符串的字符(而不是字节)个数。select LEN(loving)select le
45、n(2011.10.01)select LEN(李小葱生日快乐!)declare s varchar(50)set s=2001年月欢庆北京申奥成功年月欢庆北京申奥成功-变成变成北京年月申奥成功北京年月申奥成功select substring(s,11,2)+LEFT(s,8)+RIGHT(s,4)select replicate(loving,3)select REPLACE(SQL SERVER,ER,loving)Replace函数将字符串中的子字符串替换为指定字符串函数将字符串中的子字符串替换为指定字符串Replicate函数用于指定的次数重复字符串表达式函数用于指定的次数重复字符串表
46、达式select ASCII(loving)ascii函数返回最左端字符的函数返回最左端字符的ascii代码值。代码值。纯数字的字符串可以不用单引号,而其他字符表达式必需纯数字的字符串可以不用单引号,而其他字符表达式必需用用,否则出错。否则出错。子串替换函数子串替换函数格式:格式:STUFFSTUFF(字符表达式(字符表达式1 1,起始位置,长度,字符表达式,起始位置,长度,字符表达式2 2)功能:用功能:用“字符表达式字符表达式2 2”的值替换的值替换“字符表达式字符表达式1 1”中由中由“起始起始位置位置”和和“长度长度”指明的一个子串。指明的一个子串。select STUFF(计算机等级
47、考试计算机等级考试,4,2,专业专业)select STUFF(计算机等级考试计算机等级考试,6,0,二级二级)select charindex(l,I like football)搜索的起始位置是1select charindex(l,I like football,4)搜索的起始位置是4select charindex(l,I like football,15)搜索的起始位置是15Charindex函数返回字符串指定表达式的起始位置。函数返回字符串指定表达式的起始位置。6.5.3 日期和时间函数日期和时间函数日期和时间函数日期和时间函数描描 述述DAY(日期时间型数据日期时间型数据)返回指
48、定日期的返回指定日期的“天天”部分的整数部分的整数GETDATE(日期时间型日期时间型数据数据)以标准格式返回本地服务器的以标准格式返回本地服务器的DATETIME值值DATEADD(时间间隔,时间间隔,数值表达式,日期数值表达式,日期)为为DATETIME值添加间隔。时间间隔项决定时间间隔值添加间隔。时间间隔项决定时间间隔的单位,可取的单位,可取Year、Day of year(一年的日数一年的日数)、Quarter、Month、Day、Week、Weekday(一周的日一周的日数数)、Hour、Minute、Second、Millisecond。数值表。数值表达式为加上或者减去的时间间隔达
49、式为加上或者减去的时间间隔DATEDIFF(时间间隔,时间间隔,日期日期1,日期,日期2)计算两个计算两个DATETIME值之间指定的日期部分的差,返值之间指定的日期部分的差,返回数值型数据。时间间隔项决定时间间隔的单位,取回数值型数据。时间间隔项决定时间间隔的单位,取值与值与DATEADD中的时间间隔项相同中的时间间隔项相同MONTH(日期时间型数日期时间型数据据)返回指定日期的返回指定日期的“月月”部分的整数部分的整数YEAR(日期时间型数据日期时间型数据)返回指定日期的返回指定日期的“年年”部分的整数部分的整数ConvertCONVERT()函数是把日期转换为新数据类型的通用函数。CON
50、VERT()函数可以用不同的格式显示日期/时间数据。例如:convert(char(4),year(date1)例【6-10】:使用日期和时间函数显示当前日期,在当前日期后10天的日期,当前日期与2011年1月1日相隔的天数。T-SQL语句如下:SELECT N显示当前系统日期=GETDATE(),N在当前日期后10天的日期=DATEADD(day,10,GETDATE(),N当前日期与2011年1月1日相隔的天数=DATEDIFF(DAY,GETDATE(),2011-01-01)补充:数据类型转换函数补充:数据类型转换函数数据类型转换函数可以将某一种类型的数据转换成另一种类数据类型转换函数