8 数据库编程.ppt
数据库系统原理数据库系统原理Principles of Database Systems第八章第八章数据库编程数据库编程上一章主要内容上一章主要内容v数据库的设计过程数据库的设计过程需求分析需求分析概念结构设计概念结构设计逻辑结构设计逻辑结构设计物理设计物理设计实施实施运行维护运行维护设计过程中往往还会有设计过程中往往还会有许多反复许多反复。2Principles of Database Systems上一章主要内容上一章主要内容(续续)v数据库各级模式的形成数据库各级模式的形成数据库的各级模式是在设计过程中逐步形成的数据库的各级模式是在设计过程中逐步形成的需求分析阶段综合各用户的应用需求(现实世界的需求)需求分析阶段综合各用户的应用需求(现实世界的需求)概念设计阶段形成独立于机器特点、独立于各个概念设计阶段形成独立于机器特点、独立于各个DBMS产产品的品的概念模式概念模式(信息世界模型),用(信息世界模型),用E-R图来描述。图来描述。在逻辑设计阶段将在逻辑设计阶段将E-R图转换成具体的数据库产品支持的图转换成具体的数据库产品支持的数据模型如关系模型,形成数据库数据模型如关系模型,形成数据库逻辑模式逻辑模式。然后根据用。然后根据用户处理的要求,安全性的考虑,在基本表的基础上再建立户处理的要求,安全性的考虑,在基本表的基础上再建立必要的视图(必要的视图(VIEW)形成数据的)形成数据的外模式外模式。在物理设计阶段根据在物理设计阶段根据DBMS特点和处理的需要,进行物理特点和处理的需要,进行物理存储安排,设计索引,形成数据库存储安排,设计索引,形成数据库内模式内模式。3Principles of Database SystemsSQL和和Transact-SQL vSQL语言是关系型数据库的标准语言,而本章所讲语言是关系型数据库的标准语言,而本章所讲的的TransactSQL语言则是一种编程语言,与语言则是一种编程语言,与SQL查查询语言相比,它多了许多编程的成分,比如常量和询语言相比,它多了许多编程的成分,比如常量和变量,系统函数和用户自定义函数,流程控制语句,变量,系统函数和用户自定义函数,流程控制语句,While、For、Case语句等。语句等。vT-SQL语言的基本成分是语言的基本成分是语句语句,由一个或多个语句,由一个或多个语句可以构成一个可以构成一个批处理批处理,由一个或多个批处理可以构,由一个或多个批处理可以构成一个成一个查询脚本查询脚本(以(以sql作为文件扩展名)并保存到作为文件扩展名)并保存到磁盘文件中,供以后需要时使用。磁盘文件中,供以后需要时使用。4Principles of Database SystemsTransact-SQL语言语言vTransact-SQL语言是微软公司在语言是微软公司在MicrosoftSQLServer系统系统中使用的语言,是对中使用的语言,是对SQL语言的一种扩展形式。语言的一种扩展形式。vTransact-SQL语言是一种交互式查询语言,具有功能强大、语言是一种交互式查询语言,具有功能强大、简单易学的特点。该语言既允许用户直接查询存储在数据库简单易学的特点。该语言既允许用户直接查询存储在数据库中的数据,也可以把语句嵌入到某种高级程序设计语言中来中的数据,也可以把语句嵌入到某种高级程序设计语言中来使用使用vTransact-SQL语言有语言有4个特点:个特点:一是一体化的特点,集数据定义语言、数据操纵语言、数据控制语言、一是一体化的特点,集数据定义语言、数据操纵语言、数据控制语言、事务管理语言和附加语言元素为一体。事务管理语言和附加语言元素为一体。二是有两种使用方式,即交互使用方式和嵌入到高级语言中的使用方二是有两种使用方式,即交互使用方式和嵌入到高级语言中的使用方式。式。三是非过程化语言,只需要提出三是非过程化语言,只需要提出“干什么干什么”,不需要指出,不需要指出“如何干如何干”,语句的操作过程由系统自动完成。,语句的操作过程由系统自动完成。四是,类似于人的思维习惯,容易理解和掌握。四是,类似于人的思维习惯,容易理解和掌握。5Principles of Database SystemsTransact-SQLTransact-SQL语言的特点和执行方式语言的特点和执行方式v在在MicrosoftSQLServer2005系统中,根据系统中,根据Transact-SQL语言的功能特点,可以把语言的功能特点,可以把Transact-SQL语言分为语言分为5种类型,即数据定义语言、数据操纵种类型,即数据定义语言、数据操纵语言、数据控制语言、事务管理语言和附加的语言语言、数据控制语言、事务管理语言和附加的语言元素。元素。v在在MicrosoftSQLServer2005系统中,主要使用系统中,主要使用SQLServerManagementStudio工具来执行工具来执行Transact-SQL语言编写的查询语句。除此之外,还语言编写的查询语句。除此之外,还可以使用可以使用sqlcmd实用工具来执行实用工具来执行Transact-SQL语句。语句。6Principles of Database Systems第八章第八章 数据库编程数据库编程v8.1批处理、脚本和注释批处理、脚本和注释v8.2常量和变量常量和变量v8.3系统函数系统函数v8.4流程控制语句流程控制语句v8.5用户自定义函数用户自定义函数v8.6游标及其应用游标及其应用v8.7存储过程存储过程v8.8小结小结7Principles of Database Systems8.1 8.1 批处理、脚本和注释批处理、脚本和注释v8.1.1批处理批处理v8.1.2脚本脚本v8.1.3注释注释8Principles of Database Systems8.1.1 8.1.1 批处理批处理v批处理就是一个或多个批处理就是一个或多个Transact-SQL语句的集合,语句的集合,用户或应用程序一次将它发送给用户或应用程序一次将它发送给SQLServer,由由SQLServer编译成一个执行单元,此单元称为执行编译成一个执行单元,此单元称为执行计划,执行计划中的语句每次执行一条。计划,执行计划中的语句每次执行一条。9Principles of Database Systems8.1.1 8.1.1 批处理批处理(续续)v一些一些SQLSQL语句不能放在同一个批处理中执行,它们需语句不能放在同一个批处理中执行,它们需要遵循下述规则要遵循下述规则:1.1.大多数大多数CREATE CREATE 命令要在单个批处理中执行,但命令要在单个批处理中执行,但CREATE DATABASECREATE DATABASE、CREATE TABLECREATE TABLE、CREATE INDEX CREATE INDEX 除除外。外。2.2.调用存储过程时,如果它不是批处理中第一个语句,调用存储过程时,如果它不是批处理中第一个语句,则在它前面必须加上则在它前面必须加上EXECUTEEXECUTE。3.3.不能把规则和默认值绑定到用户定义的数据类型上后,不能把规则和默认值绑定到用户定义的数据类型上后,在同一个批处理中使用它们。在同一个批处理中使用它们。4.4.不能在给表字段定义了一个不能在给表字段定义了一个CHECKCHECK约束后,在同一个约束后,在同一个批处理中使用该约束。批处理中使用该约束。5.5.不能在修改表的字段名后,在同一个批处理中引用该不能在修改表的字段名后,在同一个批处理中引用该新字段名。新字段名。10Principles of Database Systems8.1.1 8.1.1 批处理批处理(续续)v建立批处理如同编写建立批处理如同编写SQL语句,区别在于它是多条语句,区别在于它是多条语句同时执行的,用语句同时执行的,用GO语句作为一个批处理的结语句作为一个批处理的结束。束。v例例8-1:利用查询分析器,查询客户购买商品的信息,新建:利用查询分析器,查询客户购买商品的信息,新建客客户订单视图户订单视图。11Principles of Database Systems8.1.1 8.1.1 批处理批处理(续续)createview客户订单视图客户订单视图asselecta.编号编号,a.姓名姓名,a.电话电话,b.货品编码货品编码,b.订货日期订货日期from客户信息客户信息ainnerjoin订单信息订单信息bona.编号编号=b.客户编号客户编号goselect*from客户订单视图客户订单视图Gov 由于由于CREATEVIEW建立视图语句不能和其他使用语句建立视图语句不能和其他使用语句放在同一个批处理中,所以需要放在同一个批处理中,所以需要GO命令将命令将CREATEVIEW语句与其下的语句语句与其下的语句SELECT分成两个批处理。否则分成两个批处理。否则SQLServer将报错。将报错。12Principles of Database Systems8.1.1 8.1.1 批处理批处理(续续)客户信息客户信息客户信息客户信息订单信息订单信息订单信息订单信息13Principles of Database Systems客户订单视图客户订单视图客户订单视图客户订单视图8.1.1 8.1.1 批处理批处理(续续)14Principles of Database Systems8.1.2 8.1.2 脚本脚本v数据库应用过程中,经常需要把编写好的数据库应用过程中,经常需要把编写好的SQL语句(例如创语句(例如创建数据库对象、调试通过的建数据库对象、调试通过的SQL语句集合)保存起来,以便语句集合)保存起来,以便下一次执行同样(或类似)操作时,调用这些语句集合。这下一次执行同样(或类似)操作时,调用这些语句集合。这样可以省去重新样可以省去重新编写调试编写调试SQL语句的麻烦,提高工作效率。语句的麻烦,提高工作效率。这些用于执行某项操作的这些用于执行某项操作的T-SQL语句集合称为脚本。语句集合称为脚本。T-SQL脚本存储为文件,带有脚本存储为文件,带有sql扩展名。扩展名。v使用脚本文件对重复操作或几台计算机之间交换使用脚本文件对重复操作或几台计算机之间交换SQL语语句是非常有用的。句是非常有用的。15Principles of Database Systems8.1.2 8.1.2 脚本脚本(续续)v脚本是批处理的存在方式,将一个或多个批处理组脚本是批处理的存在方式,将一个或多个批处理组织到一起就是一个脚本织到一起就是一个脚本。例如我们在查询分析器中。例如我们在查询分析器中执行的各个实例都可以称为一个脚本。执行的各个实例都可以称为一个脚本。生成脚本有两种方法:生成脚本有两种方法:1.在查询分析器中保存脚本;在查询分析器中保存脚本;2.在企业管理器中创建数据库对象脚本。在企业管理器中创建数据库对象脚本。v脚本可以在查询分析器中执行,也可以在脚本可以在查询分析器中执行,也可以在ISQL或或OSQL实用程序中执行。实用程序中执行。查询分析器是编辑、调查询分析器是编辑、调试和使用脚本的最好环境。试和使用脚本的最好环境。16Principles of Database Systems8.1.3 8.1.3 注释注释v脚脚本本文文件件除除了了含含有有T-SQLT-SQL语句句外外,还包包含含有有对SQLSQL语句句进行行说明明的的注注释。注注释是是不不能能执行行的的文文字字字字符符串串,或或暂时禁用的部分禁用的部分语句。句。v为程程序序加加注注释不不仅能能使使程程序序易易懂懂,更更有有助助于于日日后后的的管理和管理和维护。v注注释通通常常用用于于记录程程序序名名、作作者者姓姓名名和和主主要要的的程程序序更更改改日日期期,也也用用于于描描述述复复杂的的计算算或或解解释编程程方方法法等。等。vSQL SQL ServerServer支支持持两两种种形形式式的的注注释语句句:行行内内注注释与与块注注释。17Principles of Database Systems8.1.3 8.1.3 注释注释(续续)2块注释块注释块注释的语法格式为:块注释的语法格式为:/*注释文本注释文本*/或:或:/*注释文本注释文本*/1 1行内注释行内注释行内注释行内注释行内注释的语法格式为:行内注释的语法格式为:行内注释的语法格式为:行内注释的语法格式为:注释文本注释文本注释文本注释文本18Principles of Database Systems第八章第八章 数据库编程数据库编程v8.1批处理、脚本和注释批处理、脚本和注释v8.2常量和变量常量和变量v8.3系统函数系统函数v8.4流程控制语句流程控制语句v8.5用户自定义函数用户自定义函数v8.6游标及其应用游标及其应用v8.7存储过程存储过程v8.8小结小结19Principles of Database Systems8.2 常量和变量常量和变量v常量和变量是程序设计中不可缺少的元素。变量又常量和变量是程序设计中不可缺少的元素。变量又分为分为局部变量局部变量和和全局变量,全局变量,局部变量是一个能够保局部变量是一个能够保存特定数据类型实例的对象,是程序中各种类型数存特定数据类型实例的对象,是程序中各种类型数据的临时存储单元,用在批处理内据的临时存储单元,用在批处理内SQLSQL语句之间传递语句之间传递数据。局部变量的数据。局部变量的作用域作用域,只在声明它的批处理内,只在声明它的批处理内,一旦批处理结束,局部变量自动消失。一旦批处理结束,局部变量自动消失。全局变量全局变量是是系统给定的特殊变量。系统给定的特殊变量。8.2.1 8.2.1 常量常量8.2.2 8.2.2 局部变量局部变量8.2.3 8.2.3 全局变量全局变量20Principles of Database Systems8.2.1 8.2.1 常量常量vTransact-SQL的常量主要有以下几种。的常量主要有以下几种。1.字符串常量字符串常量2.数值常量数值常量3.日期常量日期常量21Principles of Database Systems1.字符串常量字符串常量v字字符符串串常常量量包包含含在在单单引引号号之之内内,由由字字母母数数字字(如如a-a-z,A-Z,0-9)z,A-Z,0-9)及及特特殊殊符符号号(!,#)(!,#)组组成成。例例如如:SQL SQL SERVER SERVER 2000.2000.如如果果字字符符串串常常量量中中包包含含有有一一个个单单引引号号,可可以以用用两两个个单单引引号号表表示示这这个个字字符符串串常常量量内内的的单单引引号号,如如 Toms Toms birthdaybirthday,即即可可以以表表示示为为TomsToms birthday birthday22Principles of Database Systems2.数值常量数值常量vBit常量常量:用0或1表示,如果是一个大于1的数,它将被转化为1。vInteger常量常量:整数常量,不包含小数点。如1968。vDecimal常量常量:可以包含小数点的数值常量。例如:123.456。vFloat常量常量和和real常量常量:使用科学计数法表示:101.5E6、54.8E-11等。vMoney常量常量:货币类型,可以包含小数点。v正数前加“+”或不加,负数前加“-”。例如-123.45,$-32.5等。23Principles of Database Systems3日期常量日期常量v使用特定格的字符日期表示,并用单引号括起来。使用特定格的字符日期表示,并用单引号括起来。如:如:2007/11/27 18:49:07.2007/11/27 18:49:07.24Principles of Database Systems8.2.2 8.2.2 局部变量局部变量v局部变量是用户在程序中定义的变量,一次只能保局部变量是用户在程序中定义的变量,一次只能保存一个值,它仅在定义的批处理范围内有效。局部存一个值,它仅在定义的批处理范围内有效。局部变量可以临时存储数值。变量可以临时存储数值。局部变量名总是以局部变量名总是以符号开符号开始,最长为始,最长为128个字符。个字符。v使用使用DECLARE语句语句声明局部变量,定义局部变量声明局部变量,定义局部变量的名字、数据类型,有些还需要确定变量的长度。的名字、数据类型,有些还需要确定变量的长度。25Principles of Database Systems8.2.2 8.2.2 局部变量局部变量(续续)v局部变量的初值为局部变量的初值为NULL,可以使用,可以使用SELECT或或SET语句语句对局部变量进行赋值。对局部变量进行赋值。SET语句一次只能语句一次只能给一个局部变量赋值,而给一个局部变量赋值,而SELECT语句可以同时给语句可以同时给一个或多个变量赋值。一个或多个变量赋值。例例8-28-2:定义两个局部变量,用他们来显示当前的日期。:定义两个局部变量,用他们来显示当前的日期。本例中给出了两种显示方式:本例中给出了两种显示方式:PRINTPRINT显示在显示在“消息消息”框,而框,而SELECTSELECT显示显示在在“网格网格”框。框。declare declare todayDatetodayDate char(10),dispStr varchar(20)char(10),dispStr varchar(20)set set todayDatetodayDate=getdategetdate()()set set dispStrdispStr=今天的日期为今天的日期为:print print dispstr+todaydatedispstr+todaydateselect select dispstr+todaydatedispstr+todaydate26Principles of Database Systems8.2.2 8.2.2 局部变量局部变量(续续)v例题:通过例题:通过SELECT语句来给多个变量赋值。语句来给多个变量赋值。declarenamevarchar(50),lianxirenvarchar(10),addressvarchar(50)declaremsgstrvarchar(80)-变量赋值变量赋值selectname=名称名称,lianxiren=联系人联系人,address=地址地址from供应商信息供应商信息setmsgstr=供应商名供应商名:+name+联系人联系人:+lianxiren+地址地址:+address-显示信息显示信息selectmsgstrGo27Principles of Database Systems8.2.2 8.2.2 局部变量局部变量(续续)v当返回的行数大于当返回的行数大于1时,仅最后一行的数据赋给变量。时,仅最后一行的数据赋给变量。vSelect名称名称,联系人联系人,地址地址from供应商信息供应商信息返回返回6条记录,仅最后一行赋给了变量值。如果要每一行条记录,仅最后一行赋给了变量值。如果要每一行一行地进行处理,则需要用到一行地进行处理,则需要用到游标游标或或循环循环的概念。的概念。28Principles of Database Systems8.2.2 8.2.2 局部变量局部变量(续续)v例例8-3:利用例利用例8-1给出的给出的“客户订单视图客户订单视图”和和“货品视图货品视图”,将客户编号为,将客户编号为2的客户订货信息显示一条消息,该消息给的客户订货信息显示一条消息,该消息给出客户姓名、电话、订货日期、货品名称、供应商。出客户姓名、电话、订货日期、货品名称、供应商。declareuNamevarchar(10),uTelvarchar(10),uOrdervarchar(10)declaregoodNvarchar(30),companyvarchar(30)declareMsgStrvarchar(80)selectuName=a.姓名姓名,uTel=a.电话电话,uOrder=a.订货日期订货日期,goodN=b.货品名称货品名称,Company=b.供应商名称供应商名称from客户订单视图客户订单视图ainnerjoin货品视图货品视图bona.货品编码货品编码=b.编码编码anda.编号编号=2setMsgStr=客户客户+uName+联系电话联系电话+uTel+于于+uOrder+订购了订购了+company+的的+goodN+.printMsgStrgo29Principles of Database Systems客户订单视图客户订单视图客户订单视图客户订单视图货品视图货品视图货品视图货品视图30Principles of Database Systems两视图连接的结果:两视图连接的结果:两视图连接的结果:两视图连接的结果:最终显示的信息:最终显示的信息:最终显示的信息:最终显示的信息:31Principles of Database Systems8.2.2 8.2.2 局部变量局部变量(续续)v局部变量的作用域,只能在声明它的批处理内部。局部变量的作用域,只能在声明它的批处理内部。一旦批处理消失,局部变量也将自动消失。一旦批处理消失,局部变量也将自动消失。v例例8-48-4:局部变量引用出错的演示。:局部变量引用出错的演示。Declaredispstrvarchar(20)Setdispstr=这是一个局部变量引用出错的演示这是一个局部变量引用出错的演示Go-批处理在这里结束,局部变量被清除。批处理在这里结束,局部变量被清除。PrintdispstrGo32Principles of Database Systems8.2.3 8.2.3 全局变量全局变量v全局变量是全局变量是SQLServer系统提供并赋值的变量。系统提供并赋值的变量。用用户不能定义全局变量,也不能用户不能定义全局变量,也不能用SET语句来修改全语句来修改全局变量。局变量。通常是将全局变量的值赋给局部变量,以通常是将全局变量的值赋给局部变量,以便保存和处理。事实上,便保存和处理。事实上,在在SQLServer中,全局变中,全局变量是一组特定的函数,它们的名称是以量是一组特定的函数,它们的名称是以开头,开头,而而且不需要任何参数,在调用时无需在函数名后面加且不需要任何参数,在调用时无需在函数名后面加上一对圆括号,这些函数也称为上一对圆括号,这些函数也称为无参数函数。无参数函数。v大部分的全局变量记录了大部分的全局变量记录了SQLServer服务器的当前服务器的当前状态信息。状态信息。33Principles of Database Systems8.2.3 8.2.3 全局变量全局变量(续续)v例例8-5:利用全局变量查看:利用全局变量查看SQLServer的版本、当前的版本、当前使用的语言、服务器及服务器名称。使用的语言、服务器及服务器名称。print所用所用SQLsever的版本信息的版本信息printversionprintprint服务器名称为:服务器名称为:+servernameprint所用的语言为:所用的语言为:+languageprint所用的服务为所用的服务为:+servicenamego34Principles of Database Systems第八章第八章 数据库编程数据库编程v8.1批处理、脚本和注释批处理、脚本和注释v8.2常量和变量常量和变量v8.3系统函数系统函数v8.4流程控制语句流程控制语句v8.5用户自定义函数用户自定义函数v8.6游标及其应用游标及其应用v8.7存储过程存储过程v8.8小结小结35Principles of Database Systems8.3 8.3 系统函数系统函数v函数对于任何程序设计语言都是非常关键的组成部函数对于任何程序设计语言都是非常关键的组成部分。分。SQLServer提供的函数分为以下几类:提供的函数分为以下几类:集合函集合函数、配置函数、游标函数、日期函数、数学函数、数、配置函数、游标函数、日期函数、数学函数、元数据函数、行集函数、安全函数、字符串函数、元数据函数、行集函数、安全函数、字符串函数、系统函数、文本与图像函数。系统函数、文本与图像函数。v一些函数提供了取得信息的快捷方法。函数有值返一些函数提供了取得信息的快捷方法。函数有值返回,值的类型取决于所使用的函数。一般来说,允回,值的类型取决于所使用的函数。一般来说,允许使用变量、字段或表达式的地方都可以使用函数。许使用变量、字段或表达式的地方都可以使用函数。v有些函数以前介绍过,例如集合函数有些函数以前介绍过,例如集合函数:(SUM()、()、AVG()、()、COUNT()、()、MAX()和()和MIN()。()。36Principles of Database Systems8.3 8.3 系统函数系统函数(续续)v8.3.1 8.3.1 字符串函数字符串函数v8.3.2 8.3.2 日期函数日期函数v8.3.3 8.3.3 系统综合函数系统综合函数v8.3.4 8.3.4 数学函数数学函数v8.3.6 8.3.6 配置函数配置函数37Principles of Database Systems8.3.1 8.3.1 字符串函数字符串函数vSpace(Space(整整型型表表达达式式):返返回回N N个个空空格格组组成成的的字字符符串串,N N为为整整型型表达式。表达式。vLtrimLtrim(字符表达式字符表达式):去掉字符表达式的前导空格。:去掉字符表达式的前导空格。vCharindexCharindex(字字符符表表达达式式1 1,字字符符表表达达式式2 2,开开始始位位置置):返返回回字字符符表表达达式式1 1在在字字符符表表达达式式2 2的的开开始始位位置置,可可以以从从所所给给出出的的“开开始始位位置置”进进行行查查找找,如如果果没没指指定定开开始始位位置置,或或者者指指定定为为负数和零,则默认从字符表达式负数和零,则默认从字符表达式2 2的开始位置进行查找。的开始位置进行查找。vReplicate(Replicate(字字符符表表达达式式,整整型型表表达达式式):将将字字符符表表达达式式重重复复多次,整数表达式给出重复的次数。多次,整数表达式给出重复的次数。38Principles of Database Systems8.3.1 8.3.1 字符串函数字符串函数(续续)v例例8-68-6:给出:给出“计算机计算机”在在“深圳现代计算机股份有深圳现代计算机股份有限公司限公司”中的位置。中的位置。select select charindexcharindex(计算机计算机,深圳现代计算机公司深圳现代计算机公司)开始位置开始位置declare declare StrTargetStrTarget varchar(30)varchar(30)set set StrTargetStrTarget=深圳现代计算机公司深圳现代计算机公司 select select CHARINDEXCHARINDEX(计算机计算机,StrTargetStrTarget)开始开始1 1位置位置,CHARINDEXCHARINDEX(计算机计算机,深圳现代计算机公司深圳现代计算机公司)开始开始2 2位置位置gogo39Principles of Database Systems8.3.1 8.3.1 字符串函数字符串函数(续续)v例例8-7:REPLICATE和和SPACE函数的练习。函数的练习。SELECTREPLICATE(*,10),SPACE(10),REPLICATE(大家好!大家好!,2),space(10),REPLICATE(*,10)PRINTREPLICATE(*,10)+SPACE(10)+REPLICATE(大大家好!家好!,2)+SPACE(10)+REPLICATE(*,10)GO40Principles of Database Systems8.3.2 日期函数日期函数v日期函数用来显示日期和时间的信息日期函数用来显示日期和时间的信息。它们处理。它们处理datetimedatetime和和smalldatetimesmalldatetime的值,并对其进行数学运算。的值,并对其进行数学运算。日期函数日期函数功能功能GetdateGetdate()()返回服务器当前日期和时间返回服务器当前日期和时间DatenameDatename(日期元素,日期日期元素,日期)返回指定日期的名字,返回指定日期的名字,字符串型字符串型DatepartDatepart(日期元素,日期日期元素,日期)返回指定日期的一部分,返回指定日期的一部分,整数型整数型DatediffDatediff(日期元素,日期日期元素,日期1 1,日期,日期2)2)返回两个日期间的差值并转换为指定日返回两个日期间的差值并转换为指定日期元素的形式期元素的形式DateaddDateadd(日期元素,数值,日期日期元素,数值,日期)将日期元素加上日期产生新的日期将日期元素加上日期产生新的日期Year(Year(日期日期)返回年份返回年份Month(Month(日期日期)返回月份返回月份day(day(日期日期)返回某月几号的整数值返回某月几号的整数值GetutcdateGetutcdate()()返回当前返回当前UTCUTC时间时间41Principles of Database Systems8.3.2 日期函数日期函数(续续)v日期元素的缩写和取值范围日期元素的缩写和取值范围日期元素日期元素缩写缩写取值取值yearyy1753-9999monthMm1-12dayDd1-31hourhh0-2342Principles of Database Systems8.3.2 日期函数日期函数(续续)v例例8-88-8:给出服务器当前的系统日期和时间,给出系统当前:给出服务器当前的系统日期和时间,给出系统当前的月份和月份名字。的月份和月份名字。select select getdategetdate()()当前日期和时间当前日期和时间,datepartdatepart(year,getdate(year,getdate()()年年,datenamedatename(year,getdate(year,getdate()()年名年名,datepartdatepart(month,getdate(month,getdate()()月份月份,datenamedatename(month,getdate(month,getdate()()月份名月份名,datepartdatepart(day,getdate(day,getdate()()日日print print 当前日期当前日期+datenamedatename(year,getdate(year,getdate()+()+年年+datenamedatename(month,getdate(month,getdate()+()+月月+datenamedatename(day,getdate(day,getdate()+()+日日 gogo43Principles of Database Systems8.3.2 日期函数日期函数(续续)v例例8-9:Mary的生日为的生日为1980/8/13,请使用日期函数,请使用日期函数计算计算Mary的年龄和天数。的年龄和天数。select年龄年龄=datediff(year,1980/8/13,getdate(),天天=datediff(day,1980/8/13,getdate()go44Principles of Database Systems8.3.3 8.3.3 系统综合函数系统综合函数v在这里重点介绍两个数据类型转换函数在这里重点介绍两个数据类型转换函数CASTCAST和和CONVERTCONVERT,在,在SQL SERVERSQL SERVER中,有些数据类型之间会自中,有些数据类型之间会自动进行转换,有些类型之间必须显式地进行转换,动进行转换,有些类型之间必须显式地进行转换,而有些类型是不允许转换的。而有些类型是不允许转换的。45Principles of Database Systems1CAST函数vv语法格式为:语法格式为:语法格式为:语法格式为:CAST(表达式表达式AS数据类型数据类型):将表达式显式转化为另一种数据类型。:将表达式显式转化为另一种数据类型。例例8-10:Mary的生日为的生日为1980/8/13,请使用日期函数计算,请使用日期函数计算Mary的年龄和的年龄和天数,并以消息的形式输出。天数,并以消息的形式输出。由由datediff得到的年龄和天数均为得到的年龄和天数均为整数整数,显示时需要进行类型转换。整数可,显示时需要进行类型转换。整数可以出现在以出现在SELECT语句中,但不能出现在语句中,但不能出现在PRINT语句中,后者只输出字语句中,后者只输出字符串。符串。Print Mary的年龄是+cast(datediff(year,1980/8/13,getdate()as char(2)+岁,核+cast(datediff(day,1980/8/13,getdate()as char(5)+天Goselect Mary的年龄是=datediff(year,1980/8/13,getdate(),datediff(day,1980/8/13,getdate()Go46Principles of Database Systems2CONVERT函数函数v如如果果希希望望指指定定类类型型转转换换后后数数据据的的样样式式,则则应应使使用用CONVERT函数进行数据类型转换。函数进行数据类型转换。v语法格式为:语法格式为:CONVERT(数据类型数据类型(长度长度),表达式表达式,style)其其中中的的表表达达式式是是任任何何有有效效的的SQLServer表表达达式式,数数据据类类型型只能是只能是系统数据类型系统数据类型,不能是用户自定义的数据类型。,不能是用户自定义的数据类型。47Principles of Database Systems2CONVERT函数函数(续续)vvSTYLESTYLESTYLESTYLE参数的典型取值参数的典型取值参数的典型取值参数的典型取值日期日期Style取值取值返回字符串的日期时间格式返回字符串的日期时间格式2位年份位年份4位年份位年份2102yy.mm.dd返回年月日返回年月日8108Hh:mm:ss只返回时间只返回时间11111Yy/mm/dd120Yy-mm-ddhh:mm:ss返回年月日和时间返回年月日和时间48Principles of Database Systems2CONVERT函数函数(续续)v设置日期输入格式用设置日期输入格式用SETDATEFORMAT。它用。它用于设置输入于设置输入DATETIME或或SMALLDATATIME数据数据的日期部分的顺序。的日期部分的顺序。v格式为:格式为:SETFORMAT格式格式|格式变量格式变量v格式的有效参数包括格式的有效参数包括mdy(月日年)、(月日年)、dmy(日月(日月年)、年)、ymd(年月日)、(年月日)、ydm(年日月)、(年日月)、myd(月年日(月年日)、dym(日年月)。美国英语默认值是(日年月)。美国英语默认值是mdy。49Principles of Database Systems2CONVERT函数函数(续续)v例例8-11:演示演示SETDATEFORMAT和和CONVERT函函数的使用方法。数的使用方法。setdateformatmdydeclaredtdatetimesetdt=03.03.0303:03:03PMselect默认格式默认格式=dt,仅有日期仅有日期=convert(varchar(30),dt,102),仅有时间仅有时间=conver