bootstrap easyui RunJS JSFiddle codepen Gist

函数--快速入门

SQL Server查询、报表和许多T-SQL语句中常使用函数来返息,这与函数在其他编程语言中使用的函数相似。函数返回类型可以是用于 表达式的值或表格。SQL Server 2005中提供的函数可分为三类:内置 函数、标量函数、表值函数。本章将对常用函数做详细介绍。

10.1 内置函数

SQL Server提供了内置函数帮助用户执行各种操作。内置函数不能修改,可以在T-SQL语句中使用。 内置函数包括:聚合函数、配置函数、加密函数、游标函数、时间和日期函数、数学函数、元数据函数、排名函数、行集函数、安全函数、字符串函数、系统函数、系统统计函数、文本和图像函数等。 

10.1.1聚合函数

聚合函数用于对一组值执行计算,并返回单个值。

聚合函数可以在SELECT语句的选择列表(子查询或外部查询)、GROUP BY子句、COMPUTE BY 子句、HAVING子句中作为表达式使用。

聚合函数包括:AVG()COUNT()MAX()MIN()SUM()CHECKSUM()CHECKSUM_AGG()STDEV()STDEVP()COUNT_BIG()VAR()GROUPING()VARP()

1AVG([ALL|DISTINCT]expression):返回组中值的平均值。

参数描述:

ALL:对所有的值进行函数运算,默认值为ALL

DISTINCT:指定AVG()函数返回唯一非空值的数量。

expression:待求平均值的表达式。 

【例10.1】统计学生平均成绩。 

use student 

select  课程注册.学号,

学生.姓名

avg(成绩) as 平均成绩

from 学生,课程注册

where 学生.学号=课程注册.学号

group by 课程注册.学号,学生.姓名

10.1.2  配置函数 

SELECT @@VERSION AS 'SQL Server Version'

10.1.3日期和时间函数

GETDATE( ): 返回当前系统日期和时间。

例:select getdate()    结果:2008-07-20 13:55:37

10.1.4.数学函数

1ABS(x):返回给定数字表达式的绝对值。

【例10.10SELECT ABS(-12)。结果:12

10.1.5元数据函数

1COL_LENGTH(table,column):返回列的长度,且以字节为单位。

参数描述:table为表名;column为列名。

【例10.19】返回Student数据库中专业表专业名称列的长度。

USE student

SELECT COL_LENGTH('专业','专业名称') 

结果:20

10.1.6字符串函数

1ASCII(str): 返回字符表达式最左端字符的 ASCII 代码值。

参数描述 str: char 或 varchar的表达式

10.1.7系统函数

【例10.23selcet cast(123 as char(1))。结果:将数字数据123转换成长度为1B的字符型数据。

10.1.8排名函数

【例10.24】按入学日期将学生纪录进行排序。

代码如下:

USE student 

GO

SELECT RANK() OVER (ORDER BY 入学时间) AS 入学先后,

姓名,性别,入学时间

FROM 学生

执行后结果如图10-5所示,请注意入学先后列左侧的列,序号依次往下加1,但入学先后列的值却不是连续的,RANK()函数使入学时间相同的排序后的序号相同,下一个的序号将与入学先后列左侧的列序号一致。这说明了RANK()函数并不总返回连续整数的原因。

10.2 用户定义函数

1.用户定义函数分类

 

SQL Server 2005中用户定义函数可分为标量

 

函数和表值函数两类,其中,表值函数可再

 

分为内联表值函数和多语句表值函数。

10.3标量函数

标量函数返回在RETURNS子句中定义的单个数据值。函数返回类型

是除textnextimagecursortimestamp外的任何数据类型。

1.标量函数的创建

语法格式如下: 

CREATE FUNCTION[schema_name.]function_name 

([{@parameter_name[AS][type_schema_name.]parameter_data_type 

      [=default]} 

      [,…n]

   ]

)

RETURNS return_data_type

   [WITH <function_option> [,…n]]

   [AS]

   BEGIN 

 

【例10.29】定义标量函数STUDENT_PASS(),统计学生考试是否合格的信息。

1)创建新标量函数,输入如下代码,执行后结果如图10-9所示。

USE student

GO

CREATE FUNCTION student_pass_info(@grade tinyint)

RETURNS char(8)

BEGIN   

   DECLARE @info char(8)

   IF @grade>=60 SET @info='通过

   ELSE SET @info='不合格'

      RETURN @info

END

GO

2)在查询分析器中输入以下代码,执行后结果如图10-10所示。

USE student

GO

SELECT 课程注册.学号,学生.姓名,课程.课程名,dbo.student_pass_info(成绩)AS 是否通过

FROM 学生,课程注册,课程

WHERE 课程注册.课程号=课程.课程号AND 课程注册.学号=学生.学号

GO

10.4 表值函数 

用户定义表值函数可分为内联表值函数和多语句表值函数

函数返回table数据类型。

1.创建内联表值函数

对于内联表值函数,没有函数主体,表是单个SELECT语句的结果集。语法格式如下:

CREATE FUNCTION[schema_name.]function_name 

([{@parameter_name[AS][type_schema_name.]parameter_data_type 

      [=default]} 

      [,…n]

   ]

)

RETURNS TABLE

   [WITH <function_option> [,…n]]

   [AS]

   RETURN[()select_stmt[]]

[;]

【例10.30】定义内联表值函数TEACHER_COURSE(),函数根据参数返回教师开课的信息。

操作步骤如下:

1)新建表值函数,代码如下所示,执行后结果如图10-11所示。

USE student

GO

CREATE FUNCTION TEACHER_COURSE(@teacher_id char(12)) 

RETURNS TABLE 

AS 

RETURN (SELECT DISTINCT 教师.教师编号,教师.姓名,系部.系部名称,课程.课程名,专业.专业名称

      FROM 教师,系部,课程,教师任课,专业

      WHERE 教师.教师编号=@teacher_id AND 教师.系部代码=系部.系部代码

      AND 教师任课.教师编号=教师.教师编号 and 课程.课程号=教师任课.课程号 AND 教师任课.专业代码=专业.专业代码)

GO 

2)在查询分析器中输入并执行以下代码,得到如图10-12所示结果

USE student

GO

SELECT * FROM TEACHER_COURSE('100000000002') 

GO 

 

2 .创建多语句表值函数

 对于多语句表值函数,在 BEGIN...END 块中定义的函数

主体包含 TRANSACT-SQL 语句,这些语句可生成行并将行插

入将返回的表中。

语法格式如下: 

CREATE FUNCTION[schema_name.]function_name 

([{@parameter_name[AS][type_schema_name.]parameter_data_type 

   [=default]} 

   [,…n]

   ])RETURNS @return_variable TABLE <table_type_definition>

   [WITH <function_option>[,…n]]

   [AS]

   BEGIN 

         function_body 

      RETURN

   END

[;] 

【例10.31】根据学生学号统计学生所取得学分信息,结果将未取得的学分信息筛去

操作步骤如下:

1)创建多语句表值函数,输入以下代码,执行后得到如图10-13所示结果。

USE student

GO

CREATE FUNCTION STUDENT_CREDIT(@student_id as char(12)) 

RETURNS  @credit TABLE

(

学号 char(12),

姓名 char(8),

课程名称 char(20) ,

学分 smallint)

AS

BEGIN

   INSERT @credit

   SELECT 课程注册.学号,学生.姓名,课程.课程名,课程.学分 FROM 课程,课程注册,学生
WHERE 学生.学号=课程注册.学号 AND 课程注册.成绩>=60 AND 课程注册.课程号=课程.课程号 AND 课程注册.学号=@student_id

RETURN

END

2)在查询分析器中再输入以下代码,使用该函数,得到如图10-14所示结果。
USE student
GO
SELECT * FROM dbo.STUDENT_CREDIT('010102002001')
GO

 

 

 

 

posted @ 2012-04-13 18:19  lvyafei  阅读(337)  评论(0编辑  收藏  举报
博客地址:lvyafei 返回顶部   返回顶部   返回顶部 站长QQ,点击这里给我发消息
无觅关联推荐,快速提升流量