版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、SQL SERVER应应 用用 与与 开开 发发计算机工程技术学院(软件学院) 任淑美二00七年十月(八)(八)本课主要内容本课主要内容 批处理注释全局变量与局部变量常用运算符及其优先级内置函数与用户自定义函数流程控制语句事务本课核心知识点本课核心知识点全局变量与局部变量内置函数与用户自定义函数流程控制语句 本课重点难点本课重点难点局部变量的定义与使用用户自定义函数的创建与调用流程控制语句的使用事务的概念与使用 本课教学目的本课教学目的了解批处理的概念掌握Transact-SQL语言中的常用全局变量的用法掌握Transact-SQL语言中的全局变量的定义与使用掌握Transact-SQL语言中
2、的常用运算符及其优先级掌握Transact-SQL语言中的常用函数的格式及用法掌握Transact-SQL语言中的自定义函数的定义与调用掌握Transact-SQL语言中的流程控制语句的种类及使用 第第8章章 Transact-SQL程序设计程序设计 。 8.1 概述概述 Transact-SQL 语言是SQL语言的一种实现形式。为了提高程序的执行效率,在Transact-SQL中将一个或多个 Transact-SQL 语句组成一个组,从应用程序一次性地发送到 SQL Server执行,SQL Server 将批处理语句编译成一个可执行单元,此单元称为执行计划,从而减少到服务器的网络往返次数。
3、这种方法就是批处理。批处理的在执行过程中可能会出现以下错误:批处理的在执行过程中可能会出现以下错误:编译错误(如语法错误)使执行计划无法编译,从而导致批处理中的任何语句均无法执行。运行时错误,如算术溢出或违反约束。大多数运行时错误将停止执行批处理中当前语句和它之后的语句。少数运行时错误(如违反约束)仅停止执行当前语句。而继续执行批处理中其它所有语句。 批处理语句中GO是作为批处理命令的结束标志。GO 命令和Transact-SQL 语句不可在同一行上,但在 GO 命令行中可包含注释。【例8-1】批处理中GO语句的使用。 -第一批处理是完成打开pubs数据库的操作USE pubsGO/*GO是批
4、处理结束符号,第一个批处理只有一条语句 USE pubs*/-第二个批处理开始-第二个批处理主要是输出“hello,World”DECLARE MyMsg VARCHAR(50)SELECT MyMsg = Hello, World.PRINT MyMsgGO -第二个批处理结束 程序运行结果为:Hello, World. 8.2 注释注释 注释,也称为注解,用于对代码进行说明,使程序代码更易维护。注释内容不被系统编译,也不被程序执行。注释通常用于记录程序名称、作者姓名和主要代码更改的日期。SQL Server 支持两种类型的注释字符:单行注释:单行注释:使用双连字符“-”作为注释符。这些注释
5、字符可与要执行的代码处在同一行,也可另起一行。从双连字符开始到行尾均为注释。多行注释:多行注释:使用“/* */” 作为注释符。【例8-2】在程序中使用注释。USE Northwind -打开Northwind数据库GO /* 第一个批处理结束,第二个批处理开始,查询Employees表中的记录 */SELECT * FROM EmployeesGO -第二个批处理结束/*下面的SQL语句是在Products上更新UnitPrice ,将它扩大9倍*/UPDATE Products SET UnitPrice = UnitPrice * 9 GO 8.3 变量变量 Transact-SQL中可
6、以使用两种变量,一种是全局变量(Global Variable),另外一种是局部变量(Local Variable)。全局变量是系统预定义好的,而局部变量则需要用户自行定义和使用。 8.3.1 使用全局变量使用全局变量 全局变量是整个SQL Server系统内部使用的变量,其作用范围是任何程序均可随时调用。全局变量通常存储一些SQL Server的配置设定值和性能统计数据。用户可在程序中用全局变量来测试系统的设定值或Transact-SQL命令执行后的状态值。全局变量以“”开头,用户只能使用,不能进行修改。局部变量的名称不能和全局变量名称相同。 常用的全局变量:常用的全局变量:CONNECTI
7、ONS:返回自上次启动SQL Server 以来连接或试图连接的次数。ERROR:返回最后执行的 Transact-SQL 语句的错误代码。IDENTITY: 返回最后插入的标识值。LANGID:返回当前所使用语言的本地语言标识符(ID)。LANGUAGE:返回当前使用的语言名。MAX_CONNECTIONS:返回SQL Server 上允许的同时用户连接的最大数。MAX_PRECISION:返回 decimal 和 numeric 数据类型所用的精度级别。ROWCOUNT:返回受上一语句影响的行数。SERVERNAME:返回运行SQL Server 的本地服务器名称。TRANCOUNT:返回
8、当前连接的活动事务数。VERSION:返回SQL Server当前安装的日期、版本和处理器类型。【例8-3】利用 ROWCOUNT 来检测是否有发生更改的行。-打开pubs数据库USE PubsGOUPDATE authors SET au_lname = JonesWHERE au_id = 999-888-7777-利用ROWCOUNT的值来判断是否有更新的操作IF ROWCOUNT = 0 print 没有更新!ELSE print 更新成功!GO 【例8-4】显示到当前日期和时间为止试图登陆SQL Server的次数。SELECT GETDATE() AS 当前登陆日期和时间 , CO
9、NNECTIONS AS 企图登陆次数8.3.2 使用局部变量使用局部变量 局部变量是用户可自定义的变量,它的作用范围仅在程序内部。 1.局部变量的定义局部变量必须以“”开头,而且必须先用DECLARE命令说明后才可使用。局部变量定义的语法形式如下:DECLARE local_variable data_type n 参数说明:local_variable: 是变量的名称。变量名必须以开头。data_type: 是任何由系统提供的或用户定义的数据类型。变量不能是 text、ntext 或 image 数据类型。2局部变量的赋值用DECLARE定义后,系统将其初始值设置为NULL值,可以使用SE
10、T和SELECT进行赋值的更改。局部变量赋值的语法形式如下:SET local_variable = expression 或者SELECT local_variable = expression n 参数说明:local_variable: 是变量的名称。expression: 是任何有效的 SQL Server表达式。 【例8-5】局部变量的应用。-打开Northwind数据库USE northwindGO-定义两个局部变量EmpID和vlNameDECLARE EmpID varchar(11),vlName char(20)-给 vlName和EmpID赋值SET vlname = D
11、odsworthSELECT EmpID = employeeid FROM employees WHERE LastName = vlname-显示EmpID的值SELECT EmpID AS EmployeeID GO8.4 运算符运算符 运算符是一些可以用来执行算术运算、字符串连接、赋值以及在字段、常量和变量之间进行比较的符号。SQL Server中的运算符主要有以下几种:算术运算符、赋值运算符、位运算符、比较运算符、逻辑运算符、字符串连接运算符和一元运算符。 8.4.1 使用算术运算符使用算术运算符 算术运算符在两个表达式上执行数学运算,这两个表达式可以是数字数据类型分类的任何数据类型
12、。 算术运算符包括:+(加)、-(减)、*(乘)、/(除)和%(模)。【例8-6】计算表达式的值,并将结果赋给局部变量ExpResult。-定义局部变量DECLARE ExpResult real-赋值局部变量SET ExpResult=1+3*7%2-显示局部变量赋值结果SELECT 表达式计算结果= ExpResult 8.4.2 使用赋值运算符使用赋值运算符 Transact-SQL 有一个赋值运算符,即等号 (=)。赋值运算符可以将数据值指定给特定的对象,也可以使用赋值运算符在列标题和为列定义值的表达式之间建立关系。 【例8-7】利用赋值运算符将Products中前3行的 FirstC
13、olumnHeading 列显示字符串 xyz。-打开Northwind数据库USE NorthwindGO-利用赋值运算符将xyz赋给前3行的FirstColumnHeading字段SELECT top 3 FirstColumnHeading = xyz, SecondColumnHeading = ProductIDFROM ProductsGO 8.4.3 使用位运算符使用位运算符 位运算符在两个表达式之间执行位操作,这两个表达式可以为整型数据类型分类中的任何数据类型。位运算符包括:&(按位与)、|(按位或)和(按位异或)。位运算符的操作数可以是整型或二进制字符串数据类型分类中
14、的任何数据类型(但 image 数据类型除外),此外,两个操作数不能同时是二进制字符串数据类型分类中的某种数据类型。 【例8-8】利用位运算符计算表达式的值。-定义局部变量DECLARE ExpResult1 int, ExpResult2 int, ExpResult3 int-赋值局部变量SELECT ExpResult1=17&11, ExpResult2=17|11, ExpResult3=1711-显示局部变量赋值结果SELECT ExpResult1 AS 按位与运算的结果, ExpResult2 AS 按位或运算的结果, ExpResult3 AS 按位异或运算的结果 8
15、.4.4 使用比较运算符使用比较运算符 比较运算符测试两个表达式是否相同。比较运算符包括:(大于)=(大于等于)、=(小于等于)、(不等于)、!=(不等于)、!(不大于)和!ExpResult2 PRINT 变量1大于变量2ELSE IF ExpResult1Exp2 AND Exp1Exp2 AND Exp1Exp2 AND Exp1Exp2 OR Exp1Exp2 OR Exp1Exp2 OR Exp1Exp2 AND Exp1Exp2 OR Exp1 10.00GO【例8-18】将当前日期以dd/mm/yy的带世纪格式输出。SELECT CONVERT(char(12), GETDATE
16、(), 103) AS 当前日期8.5.6 使用自定义函数使用自定义函数实际编程过程中,用户可以根据自己的需要创建和使用自定义函数。SQL Server 2000 支持三种用户自定义函数: 标量函数 内嵌表值函数 多语句表值函数 用户自定义函数采用零个或更多的输入参数并返回标量值或表。函数最多可以有 1024 个输入参数。用户定义函数不支持输出参数。创建标量函数的基本语法:创建标量函数的基本语法:CREATE FUNCTION owner_name. function_name ( parameter_name AS scalar_parameter_data_type = default ,
17、.n ) RETURNS scalar_return_data_type WITH , .n AS BEGIN function_bodyRETURN scalar_expressionEND参数说明:参数说明:owner_name:拥有该用户定义函数的用户 ID 的名称。function_name:用户定义函数的名称。parameter_name:用户定义函数的参数。scalar_parameter_data_type:参数的数据类型。scalar_return_data_type:是标量用户定义函数的返回值。function_body:是一系列合起来求得标量值的 Transact-SQL
18、语句。scalar_expression:指定标量函数返回的标量值。使用 符号作为第一个字符来指定参数名称,参数名称必须符合标识符的规则。每个函数的参数仅用于该函数本身,参数只能代替常量。调用用户自定义函数的基本语法为:owner_name.function_name (argument_expr,.)参数说明:owner_name:拥有该用户定义函数的用户 ID 的名称。function_name:用户定义函数的名称。argument_expr:实际参数列表。 【例8-19】编写一个用户自定义函数fun_SumCount,要求对于Pubs数据库中的Titles表进行操作。根据输入的价格的上限
19、和下限,求出此范围内的图书的数目。(1)建立用户自定义函数 fun_SumCountUSE PubsGO-创建自定义函数fun_SumCountCREATE FUNCTION fun_SumCount(max as money,min as money)RETURNS realBEGIN DECLARE countresult AS real SELECT countresult=COUNT(*) FROM titles WHERE price=min AND price=maxRETURN countresultENDGO(2)使用自定义函数fun_SumCount,求出Titiles表中价
20、格在10到20之间的图书的数目。 DECLARE maxprice as money, minprice as money, result as real SELECT maxprice=$20, minprice=$10-将fun_SumCount的执行结果赋给result-dbo指数据库所有者,此处不可省略,或写pubs.dbo SET result=dbo.fun_SumCount(maxprice,minprice) -显示结果 PRINT 价格在+CAST(minprice AS CHAR(6)+和+ CAST(maxprice AS CHAR(6)+之间的图书数目是 +CAST(r
21、esult AS CHAR(2)+本8.6 流程控制语句流程控制语句Transact-SQL提供了流程控制语句来控制SQL语句、语句块或者存储过程的执行流程。在SQL Server 2000中,可以使用的流程控制语句有BEGIN.END语句、IF.ELSE语句、CASE语句 、WHILE.CONTINUE.BREAK语句、WAITFOR语句和RETURN语句等。 8.6.1 使用使用BEGINEND语句语句BEGIN 和 END 语句用于将多个 Transact-SQL 语句组合为一个逻辑块。任何时候当控制流语句必须执行一个包含两条或两条以上 Transact-SQL 语句的语句块时,就应该使
22、用BEGIN 和 END 语句。BEGIN 和 END 语句必须成对使用:任何一条语句均不能单独使用。BEGIN 语句行后为 Transact-SQL 语句块,END 语句行指示语句块结束。BEGIN 和 END 语句用于下列情况: WHILE 循环需要包含语句块。 CASE 函数的元素需要包含语句块。 IF 或 ELSE 子句需要包含语句块。BEGIN BEGIN 和和 END END 语句的语法形式为:语句的语法形式为:BEGIN sql_statement| statement_block END 参数说明: sql_statement | statement_block :是任何有效的
23、 Transact-SQL 语句或以语句块定义的语句分组。8.6.2 使用使用IFELSE语句语句在执行 Transact-SQL 语句时强加条件。如果条件满足,则执行 Transact-SQL 语句。当不满足 IF 条件时,执行ELSE后面的语句。IF.ELSE 结构可以用在批处理中,存储过程中,以及特殊查询中。 可以在其它 IF 之后或在 ELSE 下面,嵌套另一个 IF 测试。对于嵌套层数没有限制。 IF.ELSE语句的语法形式:语句的语法形式:IF Boolean_expression sql_statement | statement_block ELSE sql_statement
24、 | statement_block 参数说明:Boolean_expression:是返回 TRUE 或 FALSE 的表达式。sql_statement | statement_block:Transact-SQL 语句或用语句块定义的语句分组。注意注意:除非使用语句块,否则 IF 或 ELSE 条件只能影响一个 Transact-SQL 语句的性能。若要定义语句块,则必须使用控制流关键字 BEGIN 和 END。如果在 IF.ELSE 块的 IF 区和 ELSE 区都使用了 CREATE TABLE 语句或 SELECT INTO 语句,那么 CREATE TABLE 语句或 SELEC
25、T INTO 语句必须指向是相同的表名。【例8-20】在Pubs数据库中对于titles表进行操作,如果现代烹调书(mod_cook)的平均价格(title)低于 $15,那么就显示文本:“现代烹调书的价格适中”。如果现代烹调书的平均价格高于 $15,则显示“现代烹调书价格昂贵”,并相应输出检索到的图书信息。USE pubsGOIF (SELECT AVG(price) FROM titles WHERE type = mod_cook) $15BEGIN PRINT 价格昂贵的现代烹调书有: PRINT SELECT SUBSTRING(title, 1, 35) AS 书名 FROM ti
26、tles WHERE type = mod_cook END8.6.3 使用使用CASE语句语句CASE语句用于计算多个条件并为每个条件返回单个值。CASE 函数通常的用途是使用可读性更强的值替换代码或缩写。 CASE语句具有两种格式: (1)简单 CASE语句:将某个表达式与一组简单表达式进行比较以确定结果。 (2)CASE搜索语句:计算一组布尔表达式以确定结果。 简单 CASE语句语法形式为:CASE input_expression WHEN when_expression THEN result_expression .n ELSE else_result_expressionEND简
27、单CASE语句的执行过程为:先计算CASE后面表达式的值,然后将其与WHEN后面的表达式逐个进行比较,若相等则返回THEN后面的表达式,否则返回ELSE后面的表达式。CASE搜索语句语法形式为:CASE WHEN Boolean_expression THEN result_expression .n ELSEelse_result_expressionENDCASE搜索语句的执行过程为:如果WHEN后面的逻辑表达式为真,则返回THEN后面的表达式,然后判断下一个逻辑表达式,如果所有的逻辑表达式都为假,则返回ELSE后面的表达式。【例8-21】在Pubs数据库中对于titles表进行操作,利用
28、简单CASE语句将titles表中的书籍类型(type)替换为中文名称。USE pubsSELECT CASE type WHEN popular_comp THEN 计算机类书籍 WHEN mod_cook THEN 现代烹饪书籍 WHEN business THEN 商务书籍 WHEN psychology THEN 心理学书籍 WHEN trad_cook THEN 传统饮食书籍 ELSE 其他书籍 END AS 书籍类型,CONVERT(varchar(30), title) AS 书名, price AS 价格FROM titlesWHERE price IS NOT NULL 【例
29、8-22】在Pubs数据库中对于titles表进行操作,利用CASE搜索语句将titles表中的书籍类型(type)替换为价格档次。SELECT CASE WHEN price IS NULL THEN 没有价格 WHEN price = 10 and price 0 BEGIN SET Result=Result*i SET i=i-1 IF i1 CONTINUE ELSE BEGIN PRINT 10的阶乘为: PRINT Result BREAK END END8.6.5 使用使用WAITFOR语句语句WAITFOR语句用于暂时停止触发语句块、存储过程或事务执行等,直到所设定的时间已过
30、或者所设定的时间已到达才继续执行。WAITFOR语句的语法形式如下: WAITFOR DELAY time | TIME time 参数说明:DELAY:指示 SQL Server 一直等到指定的时间过去,最长 24 小时。time:要等待的时间。TIME:指示 SQL Server 等待到指定时间。 注意:注意:执行 WAITFOR 语句后,在到达指定的时间之前或指定的事件出现之前,将无法使用与 SQL Server 的连接。【例8-23】使用WAITFOR语句,是WAITFOR后面的语句等待1分钟后再继续执行。USE pubsGOSELECT MAX(price) AS 最高价格 FROM
31、 titlesSELECT MIN(price) AS 最低价格 FROM titlesWAITFOR DELAY 00:01:00SELECT AVG(price) AS 平均价格 FROM titles8.6.6 使用使用RETURN语句语句RETURN语句用于无条件地终止一个查询、存储过程或者批处理,此时位于RETURN语句之后的程序将不会被执行。RETURN语句的语法形式如下:RETURN integer_expression 参数说明:integer_expression:是返回的整型值。存储过程可以给调用过程或应用程序返回整型值。注意:注意:当用于存储过程时,RETURN 不能返回
32、空值。如果过程试图返回空值(例如,使用 RETURN status 且 status 是 NULL),将生成警告信息并返回 0 值。8.7 事务事务“事务”是一种要么成功,要么失败的操作。关于事务的一个常见例子是将资金从一个帐户转到另一个账户。运用事务处理方式来解决这个问题时,若事务处理过程中的任何一步的失败,所有其他步骤将会回滚(RollBack)。因而在运用事务处理方式之后,如果上述例子中的ATM机突然产生故障,A客户信用卡帐户贷出的钱就不会丢失。8.7.1 了解事务的概念了解事务的概念事务是作为单个逻辑工作单元执行的一系列操作。 一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一
33、致性、隔离性和持久性)属性,只有这样才能成为一个事务。原子性:原子性:事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。一致性:一致性:事务在完成时,必须使所有的数据都保持一致状态。隔离性:隔离性:由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时,不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。持久性:持久性:事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。根据系统的设置,SQL Server的事务可分为两种类型:一种是系统提供的事务,
34、一种是用户定义的事务。系统提供的事务是指在执行某些T-SQL语句时,一条语句就是一个事务,例如:DELETE information这是一条语句,作用是删除数据表information中的所有记录,但它本身就构成了一个事务。删除数据表information中的所有记录,要么全部删除成功,要么全部删除失败。在实现应用中,大多数的事务处理都采用用户定义的事务来处理,它通过使用BEGIN TRANSACTION语句来明确定义。SQL Server以三种事务模式运行:(1)自动提交事务每条单独的语句都是一个事务。(2)显式事务每个事务均以 BEGIN TRANSACTION 语句显式开始,以 COMM
35、IT 或 ROLLBACK 语句显式结束。(3)隐性事务在前一个事务完成时新事务隐式启动,但每个事务仍以 COMMIT 或 ROLLBACK 语句显式完成。8.7.2 启动事务启动事务在SQL Server中,可以按显式、自动提交或隐性模式启动事务。(1)显式事务通过发出 BEGIN TRANSACTION 语句显式启动事务。(2)自动提交事务这是 SQL Server 的默认模式。每个单独的 Transact-SQL 语句都在其完成后提交。不必指定任何语句控制事务。(3)隐性事务通过 API 函数或 Transact-SQL SET IMPLICIT_TRANSACTIONS ON 语句,将
36、隐性事务模式设置为打开。下一个语句自动启动一个新事务。当该事务完成时,再下一个 Transact-SQL 语句又将启动一个新事务。8.7.3 提交事务提交事务可以使用 COMMIT 或 ROLLBACK 语句结束事务。COMMITCOMMITCOMMIT 语句保证事务的所有修改在数据库中都永久有效。COMMIT TRANSACTION COMMIT TRANSACTION 或或 COMMIT WORKCOMMIT WORK如果事务中出现错误,或者用户决定取消事务,可回滚该事务。ROLLBACK 语句通过将数据返回到它在事务开始时所处的状态,来恢复在该事务中所作的所有修改。ROLLBACK 还会
37、释放由事务占用的资源。注:注:其中BEGIN TRANSACTION 可以缩写为BEGIN TRAN,COMMIT TRANSACTION可以缩写为COMMIT TRAN或COMMIT。8.7.4 回滚事务回滚事务每个SQL Server 2000 数据库都有一个事务日志记录数据库内的数据修改。日志记录每个事务的开始和结束并将每个修改与一个事务相关联。SQL Server 实例在日志中存储足够的信息以恢复(前滚)或撤消(回滚)构成事务的数据修改。日志中的每条记录都由一个唯一的日志序号 (LSN) 标识。事务的所有日志记录都链接在一起。 【例8-24】 删除论坛库(bbsDB)发帖表(Topic
38、)中主题号为2的帖子。分析:删除这个贴子,除了要从表Topic中删除编号为2的记录,还应该从跟贴 表Reply中删除所有发帖号为2的帖子,即删除RTID=2的帖子。SET Tid=2BEGIN TRANSACTIONDELETE Topic WHERE TID=TidDELETE Reply WHERE RTID=Tid -故意加单引号,引发错误IF ERROR!=0 OR ROWCOUNT=0 BEGIN ROLLBACK TRANSACTION PRINT 更新数据表出问题 RETURNENDCOMMIT TRANSACTION在首次执行时,第四行将因为类型转换产生错误,查看结果发帖表编号
39、为2的记录仍在表中,去掉第4行中的错误,重新执行,查看二个表,帖子编号为2的记录被删除。重新再执行一次程序,由于已经删除有关帖子,系统将显示“更新数据表出问题”的提示。在这个例子中,如果不用事务处理,将在执行表记录删除时会出现帖子表中编号为2的记录被删除,则跟帖表中主题编号为2的帖子还残留在系统中,影响了数据库的完整性。8.8 综合实例综合实例实例1 日期推算。根据当前的日期推算出该日期所在的月份,季份,年份中的任意一天(例如第一天或者最后一天)的具体时间。 关键代码分析-取得当前日期DECLARE dt datetimeSET dt=GETDATE()DECLARE number intSE
40、T number=3-1指定日期该年的第一天或最后一天-A. 该年的第一天SELECT CONVERT(char(5),dt,120)+1-1-B. 该年的最后一天SELECT CONVERT(char(5),dt,120)+12-31-2指定日期所在季度的第一天或最后一天-A. 该季度的第一天SELECT CONVERT(datetime, CONVERT(char(8),DATEADD(Month, DATEPART(Quarter,dt)*3-Month(dt)-2,dt),120)+1)-B. 该季度的最后一天(CASE判断法) SELECT CONVERT(datetime,CONV
41、ERT(char(8),DATEADD(Month,DATEPART(Quarter,dt)*3-Month(dt),dt),120)+CASE WHEN DATEPART(Quarter,dt) in(1,4) THEN 31ELSE 30 END)-3指定日期所在月份的第一天或最后一天-A. 该月的第一天SELECT CONVERT(datetime,CONVERT(char(8),dt,120)+1)-B. 该月的最后一天SELECT DATEADD(Day,-,CONVERT(char(8),DATEADD(Month,1,dt),120)+1)-4指定日期所在周的任意一天SELECT
42、 DATEADD(Day,number-DATEPART(Weekday,dt),dt)-5指定日期所在周的任意星期几-A. 星期天做为一周的第1天SELECT DATEADD(Day,number-DATEPART(Weekday,dt)+DATEFIRST-1)%7,dt)-B. 星期一做为一周的第1天SELECT DATEADD(Day,number-(DATEPART(Weekday,dt)+DATEFIRST-2)%7-1,dt)实例2 特殊日期加减函数。在实际的日期处理中经常要处理在指定的日期中,加上(或者减去)多个日期部分,比如将2005年3月11日,加上1年3个月11天2小时。
43、本实例就是实现此种日期加减的功能。关键代码分析分析:本函数实现这样格式的日期字符串加减处理:y-m-d h:m:s.m | -y-m-d h:m:s.m要加减的日期字符输入方式与日期字符串相同。日期与时间部分用空格分隔最前面一个字符如果是减号(-)的话,表示做减法处理,否则做加法处理。如果日期字符只包含数字,则视为日期字符中,仅包含天的信息。具体代码:if exists (select * from dbo.sysobjects where id = object_id(Ndbo.f_DateADD) and xtype in (NFN, NIF, NTF)drop function dbo.f_DateADDGO-创建特殊日期加减函数CREATE FUNCTION dbo.f_DateADD(Date datetime,DateStr varchar(23)RETURNS datetimeASBEGINDECLARE bz int,s varchar(12),i intIF DateStr IS NULL O
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 劳动合同欺诈转外包合同
- 广告服务业务外包合同
- 浦东新区小时工外包合同
- 健身房泳池外包合同
- 浙江合庆小时工外包合同
- 怎样签定临时外包合同
- 江苏保洁劳务外包合同
- 安保工作第三方外包合同
- 电梯维保公司外包合同
- 面试时被骗签外包合同
- 2026年玉溪市中医医院公开招聘编外工作人员(17人)笔试备考试题及答案解析
- 政治+答案【一六八最后一卷】安徽合肥市第一六八中学等校2026届高三年级最后一卷(5.14-5.15)
- 山东省东营市2026年中考三模物理试题(含答案解析)
- 2026年医保办新员工岗前培训记录
- 2026年全国交管12123驾驶证学法减分(学法免分)考试题库及答案
- 2026四川达州市面向高校毕业生招聘园区产业发展服务专员37人考试模拟试题及答案解析
- 2026年中考物理模拟试卷及答案(湖南卷)
- 摩根士丹利 -半导体:中国AI加速器-谁有望胜出 China's AI Accelerators – Who's Poised to Win
- 2025年广东韶关市八年级地理生物会考题库及答案
- 2026年高级经济实务《人力资源》全真模拟卷
- 市政设施损坏快速维修与抢修方案
评论
0/150
提交评论