zoukankan      html  css  js  c++  java
  • 函数快速入门

    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

     

     

     

     

  • 相关阅读:
    LL(1)文法的判断,递归下降分析程序
    消除左递归
    DFA最小化,语法分析初步
    非确定的自动机NFA确定化为DFA
    正规式、正规文法与自动机
    第03组 Alpha事后诸葛亮
    第03组 Alpha冲刺(4/4)
    第03组 Alpha冲刺(3/4)
    第03组 Alpha冲刺(2/4)
    第03组 Alpha冲刺(1/4)
  • 原文地址:https://www.cnblogs.com/lvfeilong/p/function2.html
Copyright © 2011-2022 走看看