没有合适的资源?快使用搜索试试~ 我知道了~
首页sql server函数大全(精析)
里面包含sql server数据库里所用的函数。比如:以下这些函数是确定性的: AVG()(所有的聚合函数都是确定性的) CAST() CONVERT() DATEADD() DATEDIFF() ASCII() CHAR() SUBSTRING() 以下这些函数与变量是非确定性的: GETDATE() @@ERROR @@SERVICENAME CURSORSTATUS() RAND() 在函数中使用用户变量 变量既可用于输入,也可用于输出。在T-SQL中,用户变量以@符号开头,用于声明为特定的数据类型。可以使用SET或者SELECT语句给变量赋值。以下的例子用于将一个int类型的变量@MyNumber传递给SQRT()函数: DECLARE @MyNumber int SET @MyNumber=144 SELECT SQRT(@MyNumber) 结果是12,即144的平方根。 用SET给变量赋值 以下例子使用另一个int型的变量@MyResult,来捕获该函数的返回值。这个技术类似于过程式编程语言中的函数调用样式,即把SET语句和一个表达式结合起来,给参数赋值: DECLARE @MyNumber int, @MyResult int SET @MyNumber = 144 -- Assign the function result to the variable: SET @MyResult = SQRT(@MyNumber) -- Return the variable value SELECT @MyResult 用SELECT给变量赋值
资源详情
资源推荐
Sql server 函数大全
一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用或有意义的结果。这些要求包括:执行计算与数学运算、转换数
据、解析数值、组合值和聚合一个范围内的值等。
下表给出了 函数的类别和描述。
函数类别 作用
聚合函数 执行的操作是将多个值合并为一个值。例如P、、和 。
配置函数 是一种标量函数,可返回有关配置设置的信息。
转换函数 将值从一种数据类型转换为另一种。
加密函数 支持加密、解密、数字签名和数字签名验证。
游标函数 返回有关游标状态的信息。
日期和时间函数 可以更改日期和时间的值。
数学函数 执行三角、几何和其他数字运算。
元数据函数 返回数据库和数据库对象的属性信息。
排名函数 是一种非确定性函数,可以返回分区中每一行的排名值。
行集函数 返回可在P语句中表引用所在位置使用的行集。
安全函数 返回有关用户和角色的信息。
字符串函数 可更改P、、、、和P的值。
系统函数 对系统级的各种选项和对象进行操作或报告。
系统统计函数 返回有关P性能的信息。
文本和图像函数 可更改P和P的值。
函数的组成
函数的目标是返回一个值。大多数函数都返回一个标量值 !",标量值代表一个数据单元或一个简单值。实际上,函数可以返
回任何数据类型,包括表、游标等可返回完整的多行结果集的类型。本章不准备讨论到这个深度,第 #$ 章将讲解如何创建和使用用户自定义函数,
以返回更复杂的数据。
函数己经存在很长时间了,它的历史比 还要长。在几乎所有的编程语言中,函数调用的方式都是相同的:
Result=Function()
在 中,一般用 %% 语句来返回值。如果需要从查询中返回一个值,就可以把 %% 当成输出运算符,而不用使用等号:
SELECT Function()
一个论点
对于 函数而言,参数表示输入变量或者值的占位符。函数可以有任意个参数,有些参数是必须的,而有些参数是可选的。可选参数通
常被置于以逗号隔开的参数表的末尾,以便于在函数调用中去除不需要的参数。
在 在线图书或者在线帮助系统中,函数的可选参数用方括号表示。在下列的 &%'"函数例子中,数据类型的 和
参数是可选的(
CONVERT (data-type [(length)], expression[,style])
可将它简化为如下形式,因为现在不讨论如何使用数据类型:
CONVERT(date_type, expression[,style])
根据上面的定义,&%'"函数可接受 $ 个或 ) 个参数。因此,下列两个例子都是正确的:
SELECTCONVERT(Varchar(20),GETDATE())
SELECTCONVERT(Varchar(20),GETDATE(),101)
'
这个函数的第一个参数是数据类型 &$*",第 $ 个参数是另一个函数 +%,%"。+%,%"函数用 - 数据类型将返回
当前的系统日期和时间。第 $ 条语句中的第 ) 个参数决定了日期的样式。这个例子中的 #*# 指以 .--. 格式返回日期。本章后面将详细
介绍 +%,%"函数。即使函数不带参数或者不需要参数,调用这个函数时也需要写上一对括号,例如 +%,%"函数。注意在书中使用函数
名引用函数时,一定要包含括号,因为这是一种标准形式。
确定性函数
由于数据库引擎的内部工作机制, 必须根据所谓的确定性,将函数分成两个不同的组。这不是一种新时代的信仰,只和能否
根据其输入参数或执行对函数输出结果进行预测有关。如果函数的输出只与输入参数的值相关,而与其他外部因素无关,这个函数就是确定性函
数。如果函数的输出基于环境条件,或者产生随机或者依赖结果的算法,这个函数就是非确定性的。例如,+%,%"函数是非确定性函数,因
为它不会两次返回相同的值。为什么要把看起来简单的事弄得如此复杂呢?主要原因是非确定性函数与全局变量不能在一些数据库编程对象中使
用如用户自定义函数"。部分原因是 缓存与预编译可执行对象的方式。例如,即席查询可以使用任何函数,不过如果打算构建先进的、
可重用的编程对象,理解这种区别很重要。
以下这些函数是确定性的:
&+"所有的聚合函数都是确定性的"
"
&%'"
,%,,"
,%,//"
"
0'"
1'+"
以下这些函数与变量是非确定性的:
+%,%"
22%'''
22%'&%%
''"
',"
在函数中使用用户变量
变量既可用于输入,也可用于输出。在 中,用户变量以2符号开头,用于声明为特定的数据类型。可以使用 % 或者 %% 语
句给变量赋值。以下的例子用于将一个 类型的变量2! 传递给 '"函数:
DECLARE@MyNumberint
SET@MyNumber=144
SELECTSQRT(@MyNumber)
结果是 #$,即 #33 的平方根。
用 SET 给变量赋值
以下例子使用另一个 型的变量2'! ,来捕获该函数的返回值。这个技术类似于过程式编程语言中的函数调用样式,即把 % 语
句和一个表达式结合起来,给参数赋值:
DECLARE@MyNumberint,@MyResultint
SET@MyNumber=144
-- Assign the function result to the variable:
SET@MyResult=SQRT(@MyNumber)
-- Return the variable value
SELECT@MyResult
用 %% 给变量赋值
使用 %% 的另一种形式也可以获得同样的结果。对变量要在赋值前要先声明。使用 %% 语句来替代 % 命令的主要优点是,可以
在一个操作内同时给多个变量赋值。执行下面的 %% 语句,通过 %% 语句赋值的变量就可以用于任何操作了。
DECLARE@MyNumber1int,@MyNumber2int,
@MyResult1int,@MyResult2int
SELECT@MyNumber1=144,@MyNumber2=121
-- Assign the function result to the variable:
SELECT@MyResult1=SQRT(@MyNumber1),
@MyResult2=SQRT(@MyNumber2)
-- Return the variable value
SELECT@MyResult1,@MyResult2
上面的例子首先声明了 3 个变量,然后用两个 %% 语句给这些变量赋值,而不是用 3 个 %% 语句给变量赋值。虽然这些技术在
功能上是相同的,但是在服务器的资源耗费上,用一个 %% 语句给多个变量赋值一般比用多个 % 命令的效率要高。将一个甚至多个值选进
参数的限制是,对变量的赋值不能和数据检索操作同时进行。这就是上面的例子使用 %% 语句来填充变量,而用另外一个 %% 语句来检
索变量中数据的原因。例如,下面的脚本就不能工作:
DECLARE@RestockNamevarchar(50)
SELECTProductId
,@RestockName=Name+':'+ProductNumber
FROMProduction.Product
这个脚本会产生如下错误:
消息 #3#,级别 #4,状态 #,第 $行
向变量赋值的 %%语句不能与数据检索操作结合使用。
在查询中使用函数
函数经常和查询表达式结合使用来修改列值。这只需将列名作为参数传递给函数即可,随后函数将引用插入到 %% 查询的列的列表中,
如下所示:
SELECTTitle,NationalIDNumber,YEAR(BirthDate)ASBirthYear
FROMHumanResources.Employee
在这个例子中,1, 列的值被作为参数传递给 5%'"函数。函数的结果是别名为 15 的列。
嵌套函数
我们需要的功能常常不能仅由一个函数来实现。根据设计,函数应尽量简单,用于提供特定的功能。如果一个函数要执行许多不同的操作,
就变得复杂和难以使用。因此,每个函数通常仅执行一个操作,要实现所有的功能,可以将一个函数的返回值传递给另一个函数,这称为嵌套函
数调用。
以下是一个简单的例子:+%,%"函数的作用是返回当前的日期与时间,但不能返回经过格式化的数据,因为这是 &%'"函数的
功能。要想同时使用这两个函数,可以把 +%,%"函数的输出作为 &%'"函数的输入参数。
SELECTCONVERT(Varchar(20),GETDATE(),101)
聚合函数
报表的典型用途是从全部数据中提取出代表一种趋势的值或者汇总值,这就是聚合的意义。聚合函数回答数据使用者的如下问题(
上个月鸡雏的总销售量是多少6
#7~$3 岁之间的巴西男性在食品调味品上的平均支出是多少6
上季度所有订单中从订购到运输的最长时间是多少6
收发室里仍在工作的最老的员工是谁6
聚合函数应用特定的聚合操作并返回一个标量值单一值"。返回的数据类型对应于该列或者传递到函数中的值。聚合经常和分组、累积以
及透视等表运算一起使用,生成数据分析结果。第 8 章将详细介绍这个主题,这里仅讨论简单 %% 查询中的一些常用函数。
聚合函数不仅可用在 %% 查询中,还可以和标量输入值一起使用。那么,这样做的意义是什么呢?在下列代码中,将值 #4 传递给下
列聚合函数,每个函数的返回值都相同:
SELECTAVG(15)
SELECTSUM(15)
SELECTMIN(15)
SELECTMAX(15)
它们都返回 #4。虽然,对同一个值求平均、求和、求最小值、求最大值,所得的结果还是那个值。如果对一个值计数,又会产生什么结果
呢?
SELECTCOUNT(15)
得到的值是 #,因为函数只计数了一个值。
现在做一些有意义的事。聚合函数只有在处理结果集合中的一组数据时才有意义。每个函数都处理某列的非空值。除非使用分组操作详见
第 8 章",否则不能在同一个 %% 语句中既返回聚合的值,又返回常规的列值。
AVG()函数
&+"函数用于返回一组数值中所有非空数值的平均值。例如,表 9$ 包含了体操成绩。
表PP6-2
体操运动员 项PPPP目 成PPPP绩
Sara
跳马
9.25
Cassie
跳马
:;84
Delaney
跳马
9.25
Sammi
跳马
:;*4
Erika
跳马
8.60
Sara
平衡木
7;8*
Cassie
平衡木
9.00
Delaney
平衡木
7;$4
Sammi
平衡木
8.95
Erika
平衡木
:;:4
对这些数据执行以下查询(
%%&+<"
结果是 :;794。
如果有三个女孩没有完成一些项目,在表中没有记录成绩,则可用 来表示见表 9)"。
表PP6-3
体操运动员 项PPPP目 成PPPP绩
Sara
跳马
7;$4
Cassie
跳马
:;84
Delaney
跳马
Sammi
跳马
:;*4
Erika
跳马
:;9*
Sara
平衡木
7;8*
Cassie
平衡木
Delaney
平衡木
7;$4
Sammi
平衡木
Erika
平衡木
:;:4
脚本:
createtable#GymEvent(Playervarchar(10),[Subject]nvarcha
r(5),Scoredecimal(4,2))
go
insertinto#GymEventvalues('Sara','跳马',9.25)
insertinto#GymEventvalues('Cassie','跳马',8.75)
insertinto#GymEventvalues('Delaney','跳马',NULL)
insertinto#GymEventvalues('Sammi','跳马',8.05)
insertinto#GymEventvalues('Erika','跳马',8.60)
insertinto#GymEventvalues('Sara','平衡木',9.70)
insertinto#GymEventvalues('Cassie','平衡木',NULL)
insertinto#GymEventvalues('Delaney','平衡木',9.25)
insertinto#GymEventvalues('Sammi','平衡木',NULL)
insertinto#GymEventvalues('Erika','平衡木',8.85)
go
droptable#GymEvent
在这种情况下,计算平均值时只考虑实际的数值, 不参与运算,结果是 :;7$#3$7。P但是,如果把缺少的成绩也算在内,即用数值
* 代替 ,则会严重影响最终成绩9;$34",她们能不能进入国家级的比赛就难说了。
COUNT()函数
"函数用于返回一个列内所有非空值的个数,这是一个整型值。比如,在上一个例子中,体操数据被保存在=+% 表中,要
确定 参加的项目数,则可以执行下列查询:
SELECTCOUNT(Score)FROM#GymEventWHEREPlayer='Sammi'
结果是 #,因为 只参加了跳马比赛,她的平衡木成绩是 。
如果需要确定表中的行数,无论这些行是不是 值,都可以使用以下语法:
SELECTCOUNT(*)FROM#GymEvent
以 为例,>"查询如下所示(
SELECTCOUNT(*)FROM#GymEventWHEREPlayer='Sammi'
由于 >"函数会忽略 值,所以这个查询的结果是 $。
MIN()与 MAX()函数
"函数用于返回一个列范围内的最小非空值;"函数用于返回最大值。这两个函数可以用于大多数的数据类型,返回的值根据对
不同数据类型的排序规则而定。为了说明这两个函数,假设有一个表包含了两列值,一列是整型值,另一列是字符型值,如表 93 所示。
表PP6-4
IntegerColumn(int 类型) VarCharColumn(varChar 类型)
剩余30页未读,继续阅读
了念
- 粉丝: 1
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功