datediff是字符型函数第6节 函数
目的:理解、掌握、运用几个常用函数。
SQL Server提供了5类函数:聚合函数,日期时间函数,数学函数,字符串函数,系统函数等。
6.1聚合函数与聚合查询
聚合函数对一组值执行计算并返回单一的值。聚合函数忽略空值。聚合函数经常与SELECT语句的GROUP BY子句一同使用构成聚合查询
avg()
例1 查询药品的平均售价
SELECT avg(单价)
FROM 药品
例2 查询现金科目的借方金额的平均值
SELECT avg(借方金额)
FROM 凭证库
WHERE 科目名称 = '现金'
思考:从语义上分析,查询结果有几行?
max()和min():
max ( <表达式> ):返回表达式的最大值。
min ( <表达式> ):返回表达式的最小值。
例3 查询凭证库表中借方金额的最大值
SELECT max(借方金额)
FROM 凭证库
例4查询凭证库表中借方金额的最小值
SELECT min(借方金额)
FROM 凭证库
例5查询凭证库表中借方金额的最大值和最小值
SELECT max(借方金额), min(借方金额)
FROM 凭证库
求均值函数avg()的完整格式是:avg ( [ ALL | DISTINCT ] <表达式> )。该函数返回组中值的平均值,忽略空值。ALL对所有的值进行聚合函数运算。ALL 是默认设置。DISTINCT定 AVG 操作只使用每个值的唯一实例,而不管该值出现了多少次。执行计算时消除空值很重要,因为如果包含空值列,某些计算(如平均值)会不准确。
例如,表T1有一个数值型字段Num,如下:
          T1
Num
Name
陈明
50
张力
70
董庆
执行:
SELECT avg(Num)
FROM  T1
结果:  60
从结果很容易看出,avg忽略了空值。
例如,表T2如下:
          T2
Num
Name
50
陈明
50
张力
70
董庆
执行:
SELECT avg(distinct Num)
FROM  T2
结果:60
动手练习
查询2003年1月份现金凭证的借方金额的最大值、最小值和平均值。
sum()
例6 求借方金额的汇总
SELECT sum(借方金额)  AS 借方金额汇总
FROM 凭证库
例7 求借方金额、贷方金额的汇总
SELECT sum(借方金额)  AS 借方金额汇总, sum(贷方金额)  AS 贷方金额汇总
FROM 凭证库
求和函数sum()的完整格式是:sum ( [ ALL | DISTINCT ] <表达式> ),该函数返回表达式中所有值的和。sum只能用于数字列。忽略空值。ALL对所有的值进行聚合函数运算。ALL 是默认设置。DISTINCT指定 SUM 返回唯一值的和。
动手练习
查询2003年1月份现金凭证的借方金额总额和贷方金额总额的差值。
count():
例8 查询住院收费表中,10205部门有多少条收费记录。
SELECT count(*)
FROM 住院收费
WHERE  部门号 ='10205'
例9 查询住院收费表中有多少条收费记录
SELECT count(*)
FROM 住院收费
下面查询是否与上面查询等价?
SELECT count(医生号)
FROM 住院收费
计数函数count()的完整格式是:count ( { [ ALL | DISTINCT ] <表达式> } | * ) ),该函数返回组中行的数量。 count(*) 返回组中行的数量,count(<表达式>) 对组中的每一行都计算 <表达式>并返回<表达式>取值不为空值的行的数量。默认情况下,以上两种用法都包括重复行,而count(DISTINCT <表达式>) 对<表达式>的重复值只统计一次。ALL 是默认设置。
已知表T1和T2,表中均含有空值。请分析下面查询的结果:
T1
Num
Name
Null
陈明
50
张力
70
董庆
T2
Num
Name
50
陈明
50
张力
70
董庆
Null
李华
1) SELECT count(*)
FROM T1
2) SELECT count(num)
FROM T1
3) SELECT count(distinct num)
FROM T2
注意:使用聚合函数的查询称为聚合查询,查询结果在没有使用GROUP BY 子句的情况下最多只有一行。而且,在没有使用GROUP BY子句的情况下,SELECT后面的每个表达式都要使用聚合函数。例如,以下SQL语句是错误的:
SELECT 科目编码, 科目名称,  min(借方金额)
FROM 凭证库
在查询分析器中执行,将返回以下错误信息:
服务器: 消息 8118,级别 16,状态 1,行 1
列 '凭证库.科目编码' 在选择列表中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。
动手练习
1、查询10101部门的医生数
2、查询凭证库表中出现了多少种会计科目
3、解释以下两个SQL语句的功能
a)SELECT count(借方金额)
FROM 凭证库
WHERE 科目名称=现金
b)SELECT sum(借方金额)
FROM 凭证库
WHERE 科目名称=现金
6.2 日期和时间函数
getdate()    得到当前日期(时间)
例1 查询2003年的凭证的源凭证号和凭证发生的月份
SELECT 源凭证号,datename(mm, 凭证日期) AS 月份
FROM 凭证库
WHERE datename(yyyy,凭证日期) = '2003'
例2 从 getdate()返回的日期中提取月份名。
SELECT datename(mm, getdate()) AS 当前月
getdate()函数返回当前系统的日期和时间,格式是:datename(<日期分量>, <日期>)。该函数以字符串形式返回<日期分量>指定部分 日期名称
<日期分量>所允许的取值及其相应的缩写如下表:
日期分量
含义
yy, yyyy
qq, q
mm, m
dy, y
一年中的第几天
dd, d
所在月中第几天
wk, ww
一年中的第几个星期
Dw
星期几
Hh
小时
min
分钟
ss, s
Ms
微秒
datepart(<日期分量>, <日期>) 以整数形式返回<日期分量>指定部分。dateadd(<日期分量>, <数值>, <日期> )返回以<日期分量>指定方式表示的<日期>加上<数值>以后新的值。datediff (<日期分量>, <开始日期>, <结束日期>)以datepart指定方式表示的<结束日期>和<开始日期>之差。  日期的一部分
例3 查询2003年的凭证的源凭证号和凭证发生的月份
SELECT 源凭证号,datename(mm, 凭证日期) AS 月份
FROM 凭证库
WHERE datepart(yyyy,凭证日期) = 2003
例4
SELECT dateadd(dd,9,getdate()) AS '9天后'
例5 假定某人生日1971年2月20日,计算年龄。
SELECT datediff(yy, '1971-02-20', getdate()) AS 年龄
也可以使用year()和month()函数。分别等价于datepart(yyyy, <日期>) 和 datepart(mm, <日期>)。
6.3 数学函数
abs(<数字表达式> )返回给定<数字表达式>的绝对值。
例6 显示了 abs函数对三个不同数字的效果。
SELECT abs(-1.0), abs(0.0), abs(1.0)
round( )返回数字表达式并四舍五入为指定的长度或精度。
例7 把123.4545四舍五入,小数点后保留2位。
SELECT round(123.4545, 2)
结果:123.4500
例8对123.45十位上的数四舍五入。
SELECT round(123.45, -2)
结果: 100.00
round()函数的格式为:round ( <数值表达式>, <长度>)。当<长度>为正数时,<数字表达式>四舍五入为<长度>所指定的小数位数。当<长度>为负数时,<数字表达式>则按<长度>所指定的在小数点的左边四舍五入。
floor(<数值表达式>)返回小于或等于所给<数值表达式>的最大整数。
例9:说明正数、负数和货币值在 floor() 函数中的运用。
SELECT floor (123.45), floor (-123.45), floor ($123.45), floor (123)
结果为与<数值表达式>数据类型相同的计算值的整数部分。
123    -124    123.0000    123
ceiling (<数值表达式> )返回大于或等于所给<数值表达式>的最小整数。
例10:显示使用 CEILING 函数的正数、负数和零值。
SELECT ceiling($123.45), ceiling($-123.45), ceiling($0.0)
结果:
124.00    -123.00    0.00                   
power (<数值表达式> , <次方> )返回给定<数值表达式>的<次方>的值。
例如11: 求32
SELECT power(3, 2)
课题练习:
汇总2003年1月份的贷方金额和借方金额,四舍五入到小数点后面2位。
6.4 字符串函数
字符串函数对字符串输入值执行操作,返回字符串或数字值。
ascii (<字符表达式> )返回字符表达式最左端字符的 ASCII 代码值。
char (<整数表达式> )将 ASCII 代码转换为字符的字符串函数。
例1:
SELECT ascii('A')
结果:65
SELECT ascii('Abc')
结果:65
SELECT char(65)
结果:A
substring( <表达式>, <开始位置> , <长度> )返回字符、binary、text 或 image 表达式的一部分。<表达式>是字符串、二进制字符串、text、image、列或包含列的表达式。<开始位
置>是一个整数,指定子串的开始位置。<长度>是一个整数,指定子串的长度(要返回的字符数或字节数)。含义:截取函数

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。