版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、SQL Server 2005 SQL Server 2005 数据库数据库应用与开发应用与开发制作:朱莹泽制作:朱莹泽20212021年年1111月月2020日日第第04章章 Transact-SQL语言基础语言基础nTransact-SQL语言是语言是SQL Server 2005在在SQL语言语言的基础上增加了一些语言要素后的扩展语言,其的基础上增加了一些语言要素后的扩展语言,其语言要素包括注释、变量、运算符、函数和流程语言要素包括注释、变量、运算符、函数和流程控制语句等。控制语句等。n掌握掌握Transact-SQL语言是进一步学习更多的管理语言是进一步学习更多的管理技术和数据库应用开
2、发技术的关键。技术和数据库应用开发技术的关键。n本章主要介绍本章主要介绍Transact-SQL语言中的常量、变量、语言中的常量、变量、函数、表达式等语言成份和控制流语句等。函数、表达式等语言成份和控制流语句等。第第04章章 Transact-SQL语言基础语言基础4.1.1 Transact-SQL概述概述nTransact-SQL语言用于处理语言用于处理SQL Server 2005数据库引擎实例的相关操作,主要包数据库引擎实例的相关操作,主要包括创建和管理数据库对象、插入、检索、括创建和管理数据库对象、插入、检索、修改和删除数据。修改和删除数据。nTransact-SQL语言不是一种标准
3、的编程语语言不是一种标准的编程语言,只能够提供言,只能够提供SQL Server 的数据引擎的数据引擎来分析和运行。来分析和运行。4.1.1 Transact-SQL概述概述1Transact-SQL语言的语法约定语言的语法约定 表表4.1列出了列出了Transact-SQL 参考的语法格参考的语法格式中使用的约定,并进行了说明。式中使用的约定,并进行了说明。 语法约定语法约定 用途说明用途说明大写字母大写字母Transact-SQL 关键字关键字斜体斜体用户提供的用户提供的 Transact-SQL 语法的参数。语法的参数。粗体粗体 数据库名、表名、列名、索引名、存储过程、实用工具、数据数据
4、库名、表名、列名、索引名、存储过程、实用工具、数据 类型名以及必类型名以及必须按所显示的原样键入的文本。须按所显示的原样键入的文本。下划线下划线指示当语句中省略了包含带下划线的值的子句时应用的默认值。指示当语句中省略了包含带下划线的值的子句时应用的默认值。|(竖线)(竖线)分隔括号或大括号中的语法项。只能选择其中一项。分隔括号或大括号中的语法项。只能选择其中一项。 可选语法项。不要键入方括号。可选语法项。不要键入方括号。 必选语法项。不要键入大括号。必选语法项。不要键入大括号。,.n指示前面的项可以重复指示前面的项可以重复 n 次。每一项由逗号分隔。次。每一项由逗号分隔。.n指示前面的项可以重
5、复指示前面的项可以重复 n 次。每一项由空格分隔。次。每一项由空格分隔。;可选的可选的 Transact-SQL 语句终止符。不要键入方括号。语句终止符。不要键入方括号。 := 语法块的名称。用于对可在语句中的多个位置使用的过长语法段或语法单语法块的名称。用于对可在语句中的多个位置使用的过长语法段或语法单元进行分组和标记。可使用的语法块的每个位置由括在尖括号内的标签指示:元进行分组和标记。可使用的语法块的每个位置由括在尖括号内的标签指示:。4.1.1 Transact-SQL概述概述2Transact-SQL语言中对象的引用方法语言中对象的引用方法nSQL Server 2005的所有对数据库
6、对象名的的所有对数据库对象名的 引用引用可以是由可以是由4部分组成的名称,格式如下:部分组成的名称,格式如下: server_name. database_name. schema_name. | database_name.schema_name. | schema_name. object_name 如:如:jq309.teaching.dbo.studentn引用某个特定对象时,不必总是指定服务器、引用某个特定对象时,不必总是指定服务器、数据库和架构供数据库和架构供 SQL Server 2005 Database Engine 标识该对象。标识该对象。4.1.1 Transact-SQ
7、L概述概述3架构的使用和说明架构的使用和说明 完全限定的对象名称现在包含完全限定的对象名称现在包含4部分:部分:server.database.schema.object -即服务器即服务器.数据库数据库.架构架构.数据库对象数据库对象(3)默认架构。)默认架构。SQL Server 2005 利用默认架构利用默认架构的概念解析未使用其完全限定名称引用的对象的概念解析未使用其完全限定名称引用的对象的名称。如果未定义的名称。如果未定义 DEFAULT_SCHEMA,则,则数据库用户将把数据库用户将把 DBO 作为其默认架构。作为其默认架构。 4.1.2 Transact-SQL语句分类语句分类T
8、ransact-SQL语言中的语句根据用途分为语言中的语句根据用途分为4种类型。种类型。(1)数据定义语言(数据定义语言(DDL)。数据定义语言。数据定义语言(data definition language)通常是数据库管理系统的一部分,在通常是数据库管理系统的一部分,在SQL Server 2005中,数据库对象包括表、视图、触发器、存储中,数据库对象包括表、视图、触发器、存储过程、规则、默认、用户自定义的数据类型等。定义语言过程、规则、默认、用户自定义的数据类型等。定义语言的语句有的语句有CREATE,ALTER,DROP等。等。(2)数据操纵语言(数据操纵语言(DML)。数据操作语言。
9、数据操作语言 (data manipulation language)用于检索和操作数据的用于检索和操作数据的 SQL 语句语句的子集。数据操纵语言语句包括的子集。数据操纵语言语句包括SELECT、INSERT、UPDATE、DELETE等命令等命令。 4.1.2 Transact-SQL语句分类语句分类(3)数据控制语言数据控制语言。数据控制语言(数据控制语言(DCL)是用来设置)是用来设置或更改数据库用户或角色权限的语句,包括或更改数据库用户或角色权限的语句,包括GRANT,DENY,REVOKE等命令。在默认状态下,只有等命令。在默认状态下,只有sysadmin,dbcreator,db
10、_owner或或db_securityadmin等等人员才有权限执行数据控制语言。人员才有权限执行数据控制语言。(4)控制流语句控制流语句。Transact-SQL还为用户提供了控制流还为用户提供了控制流语句,用于控制语句,用于控制SQL语句、语句块或者存储过程的执行语句、语句块或者存储过程的执行流程。常用流程控制语句有流程。常用流程控制语句有BEGINEND、IFELSE、WHILE、BREAK、GOTO、WAITFOR、RETURN等等主要语句。主要语句。4.2.2标识符标识符 根据命名对象的方式,对象标识符可分为根据命名对象的方式,对象标识符可分为常规标识符常规标识符和和分隔标识符分隔标
11、识符。其字符数都必须在。其字符数都必须在 1 到到 100 之间。之间。1常规标识符常规标识符常规标识符是符合成为常规标识符的下列格式规则的对象常规标识符是符合成为常规标识符的下列格式规则的对象名称。常规标识符的字母要符合名称。常规标识符的字母要符合Unicode Standard 2.0标标准和如下格式规则:准和如下格式规则:n标识符可以以字母开头,也可以符号标识符可以以字母开头,也可以符号(表示局部变表示局部变量量)、#(表示临时变量表示临时变量)或者下划线或者下划线_开头。字母要符合开头。字母要符合Unicode Standard 2.0标准。标准。n后续字符可以是字母、数字、汉字和下划
12、线后续字符可以是字母、数字、汉字和下划线_。n标识符不能是标识符不能是Transact-SQL的保留字。的保留字。n标识符中不允许嵌入空格或特殊字符。标识符中不允许嵌入空格或特殊字符。例如,下面给出的示例都是合法的常规标识符。例如,下面给出的示例都是合法的常规标识符。-创建了一个名为创建了一个名为factury的数据库。的数据库。CREATE DATABASE factury-声明了一个名为声明了一个名为Ex_Local的局部变量。的局部变量。DECLARE Ex_Local NCHAR(10)-声明了一个名为声明了一个名为表的表变量。表的表变量。DECLARE 表表 TABLE( c1 CH
13、AR(10) )-用于创建一个名为用于创建一个名为TempTable的临时表变量。的临时表变量。CREATE TABLE #TempTable ( itemid INT )4.2.2标识符标识符2分隔标识符分隔标识符 对于使用分隔标识符,不符合成为常规标识符的格式对于使用分隔标识符,不符合成为常规标识符的格式规则的标识符必须始终使用方括号规则的标识符必须始终使用方括号 “ ”进行分隔。分隔进行分隔。分隔符符仅用于标识符,不能用于关键字。仅用于标识符,不能用于关键字。(1)下列情况下需要使用分隔标识符:)下列情况下需要使用分隔标识符:n当对象的名称或名称中的一部分使用保留关键字时。当对象的名称或
14、名称中的一部分使用保留关键字时。必须先更改对象的标识符,才能使用分隔标识符引用必须先更改对象的标识符,才能使用分隔标识符引用对象。对象。n当对象的名称使用未被列为限定标识符的字符时,允当对象的名称使用未被列为限定标识符的字符时,允许分隔标识符使用当前代码页中的任意字符。许分隔标识符使用当前代码页中的任意字符。4.2.2标识符标识符2分隔标识符分隔标识符(2)分隔标识符的格式规则:)分隔标识符的格式规则:n分隔标识符的主体可以包含当前代码页中的分隔标识符的主体可以包含当前代码页中的字符(包括分隔符本身)的任意组合。如果字符(包括分隔符本身)的任意组合。如果分隔标识符的主体包含分隔符,则需进行特分
15、隔标识符的主体包含分隔符,则需进行特殊处理:殊处理:n如果标识符的主体只包含左方括号如果标识符的主体只包含左方括号( ),则无,则无需进行额外处理。需进行额外处理。n如果标识符的主体包含一个右方括号,则必如果标识符的主体包含一个右方括号,则必须指定两个右方括号须指定两个右方括号 ( )。例如,下面给出的示例都是合法的分隔标识符。例如,下面给出的示例都是合法的分隔标识符。假设语句中,假设语句中,Sales Volume、Sales Cube 和和 select 都是分隔标识符。都是分隔标识符。- 在在 Sales Volume 和和 Sales Cube 标识符中插入标识符中插入空格,而空格,而
16、select是一个保留关键字。是一个保留关键字。SELECT Measures.Sales VolumeFROM Sales CubeWHERE Product.select4.2.3 常量常量常量表示一个特定数据值的符号。常量表示一个特定数据值的符号。(1)字符串常量。)字符串常量。n字符串常量括在字符串常量括在单引号单引号内并包含字母数字字符(内并包含字母数字字符(a-z、A-Z 和和 0-9)以及特殊字符(如)以及特殊字符(如!、和和#等)的字符等)的字符序列。序列。n字符串常量遵循当前数据库的默认排序规则,除非使字符串常量遵循当前数据库的默认排序规则,除非使用用 COLLATE 子句为
17、其指定了排序规则。子句为其指定了排序规则。n如果单引号中的字符串包含一个嵌入的引号,则可以如果单引号中的字符串包含一个嵌入的引号,则可以使用两个单引号表示嵌入的单引号。也可以使用双引使用两个单引号表示嵌入的单引号。也可以使用双引号定义字符串常量,则对于嵌入在双引号中的单引号号定义字符串常量,则对于嵌入在双引号中的单引号不必作特别处理。不必作特别处理。n空字符串用中间没有任何字符的两个单引号表示。空字符串用中间没有任何字符的两个单引号表示。以下是字符串的示例:以下是字符串的示例: CA123OBrienProcess X is 50%.The level for job_id: %d shoul
18、d be between %d and %d.对于对于Unicode 字符串,其前面必须有一个大写字母字符串,其前面必须有一个大写字母N 前缀。前缀。例如,例如,ABCD 是字符串常量而是字符串常量而 NABCD 则是则是 Unicode 常量。常量。4.2.3 常量常量(2)二进制常量)二进制常量 。二进制常量具有前辍二进制常量具有前辍0 x并且是十并且是十六进制数字字符串。这些常量不使用引号括起。六进制数字字符串。这些常量不使用引号括起。下面是二进制字符串的示例:下面是二进制字符串的示例:0 xAA 0 x1CE0 x69048AEFBB010E0 x ( 表示空二进制字符表示空二进制字符
19、)(3)bit 常量。常量。bit常量使用数字常量使用数字0或或1表示,并且不表示,并且不括在引号中。如果使用一个大于括在引号中。如果使用一个大于 1 的数字,则该数的数字,则该数字将转换为字将转换为1。4.2.3 常量常量(4)日期时间常量)日期时间常量。datetime 常量使用特定格式的字常量使用特定格式的字符日期值来表示,并被单引号括起来。符日期值来表示,并被单引号括起来。常用的常用的datetime常量格式的示例如下:常量格式的示例如下: 09041504/05/11 20040509 2004-05-09下面是时间常量的示例:下面是时间常量的示例:16:30:2707:27 PM
20、(5)整型常量。)整型常量。integer 常量以没有用引号括起来常量以没有用引号括起来并且不包含小数点的数字字符序列来表示。并且不包含小数点的数字字符序列来表示。integer 常量不能包含小数且必须全部为数字。常量不能包含小数且必须全部为数字。 64 128 126394.2.3 常量常量(6)数值型常量。)数值型常量。decimal 常量由没有用引号括起来并常量由没有用引号括起来并且包含小数点的数字字符串来表示。且包含小数点的数字字符串来表示。 下面是下面是 decimal 常量的示例:常量的示例: 3.14159269.807(7)浮点型常量。)浮点型常量。float 和和 real
21、常量一般使用科学记数常量一般使用科学记数法来表示。法来表示。 下面是下面是 float 或或 real 值的示例:值的示例:13.76E9 2.77E-34.2.3 常量常量(8)货币型常量。)货币型常量。money 常量以前缀为可选的小常量以前缀为可选的小数点和可选的货币符号的数字字符串来表示。数点和可选的货币符号的数字字符串来表示。下面是下面是 money 常量的示例:常量的示例: $20137$5420437数值型常量数值型常量(包括(包括integer 、decimal、 float 、money等类等类型)若要指示一个数是正数还是负数,可以对数值常量型)若要指示一个数是正数还是负数,
22、可以对数值常量应用应用 + 或或 - 一元运算符,成为一个表示有符号数字值的表一元运算符,成为一个表示有符号数字值的表达式。如果没有应用达式。如果没有应用+或或-一元运算符,则数值常量为正数。一元运算符,则数值常量为正数。例如,各数值类型的正负数示例如下:例如,各数值类型的正负数示例如下: +3356 918 -2277 +3.1426 7.3789 -2.71828 +123E-3 -12E5 -$45.56 +$423456.99 $423455(9)GUID常量。常量。全局唯一标识符(全局唯一标识符(uniqueidentifier)常)常量是表示量是表示 GUID 的字符串。可以使用字
23、符或二进制字符串格的字符串。可以使用字符或二进制字符串格式指定。式指定。以下是以下是 GUID类型示例:类型示例:6F9619FF-8B86-D011-B42D-00C04FC964FF0 xff19966f868b11d0b42d00c04fc964ff各种类型常量举例各种类型常量举例nStu(sno nchar(3),sname nchar(3),sbir datetime ,sage tinyint ,sjj money) 奖学金奖学金Insert into stu values( 101 , 王美丽王美丽 , 1987-6-7 , 25 , $36.5 )4.2.4 变量变量n两种形式
24、的变量:两种形式的变量:用户自己定义的局部变量和系统提供用户自己定义的局部变量和系统提供的全局变量。的全局变量。n声明变量声明变量:使用:使用DECLARE命令,为变量赋值时则需要命令,为变量赋值时则需要使用使用SET和和SELECT命令。命令。SET命令一次只能为命令一次只能为一个一个变变量赋值,而量赋值,而SELECT命令可以同时为命令可以同时为多个多个变量赋值。变量赋值。 1局部变量局部变量局部变量是一个能够拥有特定数据类型的对象,它的作用局部变量是一个能够拥有特定数据类型的对象,它的作用范围仅限制在程序内部。局部变量被引用时要在其名称范围仅限制在程序内部。局部变量被引用时要在其名称前加
25、上标志,而且必须先用前加上标志,而且必须先用DECLARE命令定义后才命令定义后才可以使用。可以使用。 定义局部变量的语法形式如下:定义局部变量的语法形式如下:DECLAER local_variable data_type,n如果想要设定局部变量的值,必须使用如果想要设定局部变量的值,必须使用SELECT命令或命令或者者SET命令。其语法形式为:命令。其语法形式为:SET local_variable = expression 或者:或者: SELECT local_variable = expression ,.n 例例4.1声明变量,然后赋值。声明变量,然后赋值。程序代码如下:程序代码如
26、下:DECLARE myvar nchar(20)DECLARE myname nchar(4) , bir datetimeDECLARE b bitset myvar = This is a test -只给单个变量赋值只给单个变量赋值Select myname= 张百万张百万 ,bir= 1991-12-6 -多个多个Set b = 1 或或 Set b = 5 或或 set b=true Print b - 均为均为 1GOndeclare a nchar(6) ,b char(5), c varchar(10),d nvarchar(8)nselect a=哈尔滨剑桥学院哈尔滨剑桥学
27、院,b=哈尔滨哈尔滨剑桥学院剑桥学院,c=哈尔滨剑桥学院哈尔滨剑桥学院,d=哈哈尔滨剑桥学院尔滨剑桥学院nselect a,b,c,dnselect len(a),len(b),len(c),len(d)4.2.4 变量变量 2. 全局变量全局变量 n全局变量是全局变量是SQL Server系统内部使用的变量,以系统内部使用的变量,以开开头,可以让任何程序均可以随时调用。头,可以让任何程序均可以随时调用。n全局变量通常存储一些全局变量通常存储一些SQL Server的配置设定值和统计的配置设定值和统计数据。用户可以在程序中用全局变量来测试系统的设定数据。用户可以在程序中用全局变量来测试系统的设
28、定值或者是值或者是Transact-SQL命令执行后的状态值。命令执行后的状态值。n在使用全局变量时应该注意以下几点:在使用全局变量时应该注意以下几点:n全局变量是在服务器级定义的。全局变量是在服务器级定义的。n用户只能使用预先定义的全局变量。用户只能使用预先定义的全局变量。n引用全局变量时,必须以标记符引用全局变量时,必须以标记符“”开头。开头。n局部变量名称不能与全局变量的名称相同,否则会在局部变量名称不能与全局变量的名称相同,否则会在应用程序中出现不可预测的结果。应用程序中出现不可预测的结果。例例4.2显示到当前日期和时间为止试图登录显示到当前日期和时间为止试图登录SQL Server
29、2005的次数。的次数。程序代码如下:程序代码如下:SELECT GETDATE() AS 当前的时期和时间当前的时期和时间, CONNECTIONS AS 试图登录的次数试图登录的次数select version - 显示版本信息显示版本信息4.2.5注释注释n注释是程序代码中非可执行的文本字符串。使用注释对注释是程序代码中非可执行的文本字符串。使用注释对代码进行说明,不仅能使程序易读易懂,而且有助于日代码进行说明,不仅能使程序易读易懂,而且有助于日后的管理和维护。后的管理和维护。n注释通常用于记录程序名称、作者姓名和主要代码更改注释通常用于记录程序名称、作者姓名和主要代码更改的日期。注释还
30、可以用于描述复杂的计算或者解释编程的日期。注释还可以用于描述复杂的计算或者解释编程的方法。的方法。n在在SQL Server 2005中,可以使用两种类型的注释方法:中,可以使用两种类型的注释方法:n-注释。该方式用于单行注释。注释。该方式用于单行注释。n/* */注释。注释。“/*”用于注释文字的开头,用于注释文字的开头,“*/”用于用于注释文字的结尾,利用它们可以在程序中标识多行文注释文字的结尾,利用它们可以在程序中标识多行文字为注释。当然,单行注释也可以使用。字为注释。当然,单行注释也可以使用。 例例4.3 为前面的例子添加注释。为前面的例子添加注释。程序代码如下:程序代码如下:DECL
31、ARE myvar nchar(20) -定义变量定义变量myvar/* 下面第一行给变量赋值下面第一行给变量赋值 第第2行输出变量值行输出变量值 */set myvar = This is a testSELECT myvar GO 运算符是用来执行算术运算、字符串连接、赋值以及运算符是用来执行算术运算、字符串连接、赋值以及在字段、常量和变量之间进行比较的操作符。运算符主要在字段、常量和变量之间进行比较的操作符。运算符主要有以下有以下6大类:大类:n算术运算符算术运算符n赋值运算符赋值运算符n位运算符位运算符n比较运算符比较运算符n逻辑运算符逻辑运算符n字符串串联运算符。字符串串联运算符。4
32、.3.1算术运算符算术运算符 算术运算符主要用于实现数学计算功能,包含的运算术运算符主要用于实现数学计算功能,包含的运算符及功能说明如表算符及功能说明如表4.2所示。主要包括所示。主要包括 +、 - 、*、 /、 % 。4.3.2 比较运算符比较运算符 比较运算符用于比较两个表达式的值是否相等。比较运算符用于比较两个表达式的值是否相等。Transact-SQL支持的比较运算符有支持的比较运算符有 、=、= 、 、=、 、 != 、! 、!、=、=、!=、!、!(比较运算符)(比较运算符)6(位异或)、(位异或)、|(位或)(位或)7NOT8AND9ALL、ANY、BETWEEN、IN、LIKE
33、、OR、SOME10=(赋值)(赋值) SQL Server 2005为为Transact-SQL语言提语言提供了大量的功能函数以供编程使用。如果按供了大量的功能函数以供编程使用。如果按照功能对这些函数进行划分,可以将它们大致划分照功能对这些函数进行划分,可以将它们大致划分为为10类。类。n字符串函数字符串函数 文本文本/图像管理函数图像管理函数n日期日期/时间类函数时间类函数 数学计算函数数学计算函数nSQL系统配置函数系统配置函数 系统函数系统函数n安全管理函数安全管理函数 系统统计函数系统统计函数n游标函数游标函数 元数据函数元数据函数4.4.1 数学函数数学函数n数学函数用于对数值型字
34、段和表数学函数用于对数值型字段和表达式进行处理,并返回运算结果。达式进行处理,并返回运算结果。数学函数可以对数学函数可以对SQL Server 2005提供的各种数值型数据进行处理。提供的各种数值型数据进行处理。n常用的数学函数如表所示常用的数学函数如表所示 函函 数数功能描述功能描述ABS返回表达式的绝对值返回表达式的绝对值CEILING返回大于或等于指定数值表达式的最小整数返回大于或等于指定数值表达式的最小整数EXP返回给定表达式为指数的返回给定表达式为指数的e值值FLOOR返回小于或等于指定数值表达式的最大整数返回小于或等于指定数值表达式的最大整数LOG返回给定表达式的自然对数返回给定表
35、达式的自然对数LOG10返回给定表达式的以返回给定表达式的以10 为底的对数为底的对数PI常量,圆周率常量,圆周率POWER返回给定表达式的指定次方的值返回给定表达式的指定次方的值RADIANS角度值转换为弧度值角度值转换为弧度值RAND返回返回01之间的随机之间的随机float数数ROUND返回指定小数的位数的表达式的值返回指定小数的位数的表达式的值SQUARE返回给定表达式的平方返回给定表达式的平方SQRT返回给定表达式的平方根返回给定表达式的平方根例4.7 输出下列函数的值CEILING(),FLOOR(),ROUND()。程序代码如下:select ceiling(13.6), flo
36、or(13.7), round(13.45767,3) 14 13 13.45800select Pi( ), power(5,2), power(2,4),rand( )4.4.2 聚合函数聚合函数 n聚合函数用于对一组值进行计算并返回一聚合函数用于对一组值进行计算并返回一个单一的值。除个单一的值。除COUNT 函数之外,聚合函函数之外,聚合函数忽略空值。聚合函数经常与数忽略空值。聚合函数经常与SELECT 语语句的句的GROUP BY 子句一同使用。子句一同使用。n聚合函数的作用是在结果集中通过对被选聚合函数的作用是在结果集中通过对被选列值的收集处理,并返回一个数值型的计列值的收集处理,并
37、返回一个数值型的计算结果。常用聚合函数如表所示。算结果。常用聚合函数如表所示。函数函数 功功 能能 描描 述述AVG( )返回组中数据的平均值返回组中数据的平均值,忽略忽略NULL值值COUNT( )返回组中项目的数量返回组中项目的数量MAX( )返回多个数据比较的最大值返回多个数据比较的最大值, 忽略忽略NULL值值MIN( )返回多个数据比较的最小值返回多个数据比较的最小值, 忽略忽略NULL值值SUM( )返回组中数据的和返回组中数据的和, 忽略忽略NULL值值4.4.3时间日期函数时间日期函数n日期和时间函数用于对日期和时间数据日期和时间函数用于对日期和时间数据进行各种不同的处理和运算
38、,并返回一进行各种不同的处理和运算,并返回一个字符串、数字值或日期和时间值。个字符串、数字值或日期和时间值。n日期时间函数可以在表达式中直接调用,日期时间函数可以在表达式中直接调用,常用的日期时间函数如表所示。常用的日期时间函数如表所示。函函 数数 名名功功 能能 描描 述述GETDATE获取当前系统的日期和时间获取当前系统的日期和时间DATEADD(unit,n,date)在在date的基础上添加的基础上添加n(天天/小时小时/年年)后的日期后的日期DATEDIFF(unit,date1,date2)以以unit为单位计算日期为单位计算日期1与日期与日期2之间的差值之间的差值DAY获取指定日
39、期的天的日期部分整数获取指定日期的天的日期部分整数MONTH获取指定日期的月份的日期部分整数获取指定日期的月份的日期部分整数YEAR获取指定日期的年份的日期部分整数获取指定日期的年份的日期部分整数4.4.4 转换函数转换函数SQL Server 2005 如果需要进行不同类型数如果需要进行不同类型数据之间的转换,可以使用转换函数据之间的转换,可以使用转换函数CAST 或或 CONVERT。1转换函数转换函数CONVERT和和CAST的语法格式的语法格式(1)CAST函数的语法格式。函数的语法格式。CAST( expression AS data_type )4.4.4 转换函数转换函数1转换函
40、数转换函数CONVERT和和CAST的语法格式的语法格式(2)CONVERT函数的语法格式。函数的语法格式。 其语法形式为:其语法形式为: CONVERT (data_type(length), expression ,style) 4.4.4 转换函数转换函数2转换类型转换类型(1)显式转换。使用)显式转换。使用 CAST 和和 CONVERT 转换函数可以将一种数据类型的表达式强转换函数可以将一种数据类型的表达式强制转换为另一种数据类型的表达式。制转换为另一种数据类型的表达式。n如果尝试进行不可能的转换(例如,将包如果尝试进行不可能的转换(例如,将包括字母的括字母的 char 表达式转换为
41、表达式转换为 int),),SQL Server 2005将显示错误消息。将显示错误消息。4.4.4 转换函数转换函数2转换类型转换类型利用利用 CAST 或或 CONVERT时,应该注意如下问题。时,应该注意如下问题。n需要提供的信息:需要提供的信息: 要转换的表达式和要将指要转换的表达式和要将指定的表达式转换为的数据类型。定的表达式转换为的数据类型。n除非将被转换的值存储起来,否则转换仅在除非将被转换的值存储起来,否则转换仅在 CAST 函数或函数或 CONVERT 函数的作用时间范函数的作用时间范围内有效。围内有效。n如果转换时没有指定数据类型的长度,则如果转换时没有指定数据类型的长度,
42、则 SQL Server 自动将自动将 30 作为长度值。作为长度值。4.4.4 转换函数转换函数2转换类型转换类型(2)隐式转换。)隐式转换。SQL Server 2005 可以自动可以自动对某些表达式进行转换,这种转换称为隐对某些表达式进行转换,这种转换称为隐式转换。转换时不必使用式转换。转换时不必使用 CAST 或或 CONVERT 来进行这些显式转换。来进行这些显式转换。4.4.4 转换函数转换函数例4.9日期和时间函数的使用示例。程序代码如下:PRINT 今天的日期是 + CAST(GETDATE() AS VARCHAR(20)PRINT 今年是+CONVERT(VARCHAR(1
43、2),Year(Getdate()+年PRINT 本月是+CONVERT(VARCHAR(12),Month(Getdate()+月PRINT 今天是+CONVERT(VARCHAR(12),day(Getdate()+号4.4.5 字符串函数字符串函数 字符串函数可以对二进制数据、字符串和字符串函数可以对二进制数据、字符串和表达式执行不同的运算,大多数字符串函数表达式执行不同的运算,大多数字符串函数只能用于只能用于char和和varchar数据类型以及明确转数据类型以及明确转换成换成char和和varchar的数据类型,少数几个字的数据类型,少数几个字符串函数也可以用于符串函数也可以用于bi
44、nary和和varbinary数据数据类型。常见字符串函数及其功能如表所示。类型。常见字符串函数及其功能如表所示。函数名称功能描述ASCII返回字符表达式最左端字符的ASCII代码值CHAR将ASCII代码转换为字符的字符串函数。LEFT返回从字符串左边开始指定个数的字符LEN返回给定字符串 表达式的字符个数,其中不包含尾随空格LTRIM删除起始空格后返回字符表达式REPLACE用第3个表达式替换第一个字符串表达式中,出现的所有第2个给定字符串表达式RIGHT返回从字符串右边开始指定个数的字符SPACE返回由重复的空格组成的字符串。STR返回由数字数据转换来的字符数据STUFF删除指定长度的字
45、符并在指定的起始点插入另一组字符SUBSTRING求子串函数例4.10 使用 LTRIM 函数删除字符变量中的起始空格。程序代码如下:DECLARE str varchar(60)SET str = Five spaces SELECT Here is the string + strSELECT Here is the string + LTRIM(str) 程序执行结果如下: -Here is the string Five spacesHere is the stringFive spaces(2 行受影响)(1)取左子串函数)取左子串函数 LEFT (,)【例例】PRINT LEFT
46、(HARDWORK,3) 结果为结果为“HAR”(2)取右子串函数)取右子串函数 RIGHT (,)【例例】PRINT RIGHT (HARDWORK,4) 结果为结果为“WORK” 字符函数字符函数(3)取子串函数)取子串函数 SUBSTRING (, ) PRINT SUBSTRING (HARDWORK,4,2) -结果为结果为DW PRINT SUBSTRING (黑大剑桥学院黑大剑桥学院,3,4) -结果为结果为剑桥学院剑桥学院 PRINT SUBSTRING (WORK,5,2) - 结果为结果为 ,空串空串 ,字符型,长度为,字符型,长度为0(4)求字符串长度函数)求字符串长度函
47、数 LEN ()【例例】PRINT LEN (how are you) -结果为结果为11 PRINT LEN (剑桥吧主剑桥吧主 No.1) -结果为结果为9(5)子串替换函数)子串替换函数 STUFF (, ,)【例例】 PRINT STUFF (com,2,2, dma) - 结果为结果为“cdma” PRINT STUFF (com,3,1, abc) - 结果为结果为“coabc” PRINT STUFF (com,2,1, ) - 结果为结果为“c m” PRINT STUFF (com,2,1,) - 结果为结果为“cm”(6)产生重复字符函数)产生重复字符函数 格式格式:REP
48、LICATE (,)功能功能:产生指定个字符。:产生指定个字符。【例例】PRINT REPLICATE ( *,5 ) -结果为结果为“*” PRINT Len (REPLICATE ( *,3 ) -结果为结果为 64.4.6 自定义函数自定义函数n用户根据工作需要,可以创建用户定义函数,用户根据工作需要,可以创建用户定义函数,以提高程序开发和运行的质量。创建用户定义以提高程序开发和运行的质量。创建用户定义函数首先要根据业务需要选择函数类型。函数首先要根据业务需要选择函数类型。n创建自定义函数的有两种方法创建自定义函数的有两种方法:n用户利用用户利用SQL Server Management
49、 Studio中中的工具改写模板代码创建函数的工具改写模板代码创建函数n使用使用CREATE FUNCTION语句创建函数。语句创建函数。nDECLARE sno CHAR(10) , name VARCHAR(10) , sex NCHAR(2) , brithday DATETIME , usually INT , final NUMERIC(4,1)nSET sno=0822111208nSET name=韩吟秋韩吟秋nSET sex=男男nSELECT brithday=1989-12-18,usually=88.5,final=90nPRINT sno + name + sexnPR
50、INT brithdaynPRINT usuallynPRINT finalnPRINT getdate()+100nPRINT 10+10%4/2+(7-6)*2.5ndeclare a char(5), b varchar(5), c int, d decimal(5,2)nselect a=123,b=456.5,c=123,d=456.5nprint a+bnprint a+dnprint c+dnselect a=数据库数据库, b=程序开发程序开发nprint a+bnprint a+d -转换失败转换失败nselect ceiling(16.3), ceiling(-16.8),
51、 ceiling(0.0)nselect floor(16.3), floor(-16.8), floor(0.0)nselect round(123.456,2), round(123.456,-1), round(123.456,-2), round(123.456,-4)nselect round(175.86,0)ndeclare count int, date datetimenselect count=255, date=getdate()nprint 变量变量count的值为:的值为: + cast(count as varchar(5)nprint cast(2009-12-2
52、5 as smalldatetime)+100ndeclare str as nchar(25)nset str=SQL SERVER 2005数据库应用与开发数据库应用与开发nselect len (str), charindex(数据库数据库,str), substring(str,5,6), replace(str,开发开发,设计设计), lower(str), ascii(str)nTransact-SQL为用户提供了控制流语为用户提供了控制流语句,用于控制程序的流程,控制流语句,用于控制程序的流程,控制流语句是指那些用来控制程序执行和流程句是指那些用来控制程序执行和流程分支的语句。分
53、支的语句。n在在SQL Server 2005中,流程控制语中,流程控制语句主要用来控制句主要用来控制SQL语句、语句块或语句、语句块或者存储过程的执行流程。者存储过程的执行流程。 4.6.1 IFELSE语句语句nIFELSE语句是条件判断语句,其中,语句是条件判断语句,其中,ELSE子句是可子句是可选的,最简单的选的,最简单的IF语句没有语句没有ELSE子句部分。子句部分。IFELSE语句用来判断当某一条件成立时执行某段程序,条件不语句用来判断当某一条件成立时执行某段程序,条件不成立时执行另一段程序。成立时执行另一段程序。SQL Server允许嵌套使用允许嵌套使用IFELSE语句,而且嵌
54、套层数没有限制。语句,而且嵌套层数没有限制。nIFELSE语句的语法形式为:语句的语法形式为: IF Boolean_expression sql_statement | statement_block ELSE sql_statement | statement_block 例例4.11在在Transact-SQL中使用中使用IF语句。语句。程序代码如下:程序代码如下:DECLARE point as intSet point =87IF point =60PRINT pass ,very good !ELSEPRINT no pass , try again!4.6.2 BEGINEND语
55、句语句nBEGINEND语句能够将多个语句能够将多个Transact-SQL语语句组合成一个语句块,并将它们视为一个单元句组合成一个语句块,并将它们视为一个单元处理。在条件语句和循环等控制流程语句中,处理。在条件语句和循环等控制流程语句中,当符合特定条件便要执行两个或者多个语句时,当符合特定条件便要执行两个或者多个语句时,就需要使用就需要使用BEGINEND语句。语句。nBEGINEND语句的语法形式为:语句的语法形式为:BEGIN sql_statement | statement_block END 例例4.12 用用BEGIN END 语句可使语句可使IF 语句在计算语句在计算结果为结果
56、为FALSE时跳过语句块。时跳过语句块。程序代码如下:程序代码如下:DECLARE MyVar floatSet MyVar=5.7If MyVar10.8 BEGIN SET MyVar = 123.456 PRINT 变量变量MyVar的值为:的值为: PRINT CAST(MyVar AS varchar(12 ) ENDELSE PRINT CAST(MyVar AS varchar(12 )4.6.3 WHILE语句语句nWHILECONTINUEBREAK语句用于设置重语句用于设置重复执行复执行 SQL 语句或语句块的条件。语句或语句块的条件。CONTINUE语句可以使程序跳过语句
57、可以使程序跳过CONTINUE语句后面的语句。语句后面的语句。nBREAK语句则使程序完全跳出循环。语句则使程序完全跳出循环。nWHILE语句的语法形式为:语句的语法形式为: WHILE Boolean_expression sql_statement | statement_block BREAK sql_statement | statement_block CONTINUE While 求求1+2+3+100的值的值n- 求和求和1+2+3+.+100 的值的值nDeclare s int ,i intnSelect s=0, i=1nWhile i=90 THEN 优秀优秀 WHEN
58、usually*0.2+ final*0.8=80 THEN 良好良好 WHEN usually*0.2+ final*0.8=70 THEN 中等中等 WHEN usually*0.2+ final*0.8=60 THEN 及格及格 WHEN usually*0.2+ final*0.860 THEN 不及格不及格 END AS 总评成绩总评成绩FROM score where courseno in (c06108,c08106,c05109 ) GO程序执行结果如下:学号 课程 总评成绩- - -0822111208 c05109 良好0822111208 c06108 优秀082411
59、3307 c05109 良好. .0935222201 c05109 优秀0937221508 c05109 良好0937221508 c08106 优秀(11 行受影响)4.6.5 其他语句其他语句 1GO 语句语句 Go 语句是批处理的结束语句。批处理是一起提语句是批处理的结束语句。批处理是一起提交并作为一个组执行的若干交并作为一个组执行的若干SQL语句。语句。 2. PRINT语句语句nPRINT语句的功能是向客户端返回用户定义消语句的功能是向客户端返回用户定义消息。息。nPRINT语句的语法格式:语句的语法格式:PRINT local_variable | string_expr4.6
60、.5 其他语句其他语句 3GOTO语句语句 nGOTO语句可以使程序直接跳到指定的标有标语句可以使程序直接跳到指定的标有标识符的位置处继续执行,而位于识符的位置处继续执行,而位于GOTO语句和语句和标识符之间的程序将不会被执行。标识符可以标识符之间的程序将不会被执行。标识符可以为数字与字符的组合,但必须以为数字与字符的组合,但必须以“: ”结尾。结尾。nGOTO语句的语法形式为:语句的语法形式为: label : statement | statement_block GOTO label例例4.16 利用利用GOTO语句求出从语句求出从1加到加到7的总和。的总和。程序代码如下:程序代码如下:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 住院陪护租房合同范本
- 平衡车租赁合同范本
- 熟食专利转让合同范本
- 土地流转销合同范本
- 中建ci合同范本
- 游艇对外租赁合同范本
- 自助买卖橱柜合同范本
- 未来五年通信基站用石英晶体振荡器企业ESG实践与创新战略分析研究报告
- 未来五年棉籽毛油行业直播电商战略分析研究报告
- 中储粮笔试已定10月13日笔试笔试参考题库附带答案详解(3卷)
- 肉牛合作养殖方案(3篇)
- 骨盆骨折患者麻醉管理要点
- 2025贵阳人文科技学院教师招聘考试试题
- 高职院校产教融合共同体建设国内外研究动态及启示
- T/CWAN 0068-2023铜铝复合板
- 儿童寓言故事-乌鸦喝水
- 弱电系统维护中的安全和文明措施
- 紧急状态下护理人力资源调配
- 安全生产文明施工评价报告
- 眼科滴眼药水课件
- 2024-2025学年青海省西宁市七年级(上)期末英语试卷(含答案)
评论
0/150
提交评论