为了更方便快捷地完 成大量的任务,SOLServer提供了一些内部函数,可以和SOL Server的SELECT语句联合使用,也可以与UPDATE和INSERT一起使用,可以进行类型转换,日期处理,数学计算,实现系统功能。
根据用途,把函数分为五类,分别是系统函数、字符串函数、日期函数、聚合函数与数学函数。
首先简单介绍一下各类函数:
CONVERT和CAST的类型转换使用频繁,在很多场合均可使用。尤其是在网站应用中,常常需 要将各种类型的数据转换成指定格式的字符串,然后拼接成显示内容.。
字符串函数用于控制返回给用户的字符串,这些功能仅用于字符型数据。
字符串拼接很简单,两个字符串之间使用“+”即可。
在SQL Server 中不能直接对日期运用数学函数,需要使用日期函数操作日期值,例如,如果执 行一个诸如“当前日期+1”的语句,SQL Server无法理解要增加的是一日、一月还是一年。 日期函数帮助提取日期值中的日、月及年,以便分别操作它们。
常用的聚合函数有SUM()、AVG()、MAX()、MIN()和COUNT()
(1)SUM()函数返回表达式中所有数值的总和,它只能用于数字类型的列,不能够汇总 字符,日期等其他数据类型。
(2)AVG()函数返回表达式中所有数值的平均值,它也只能用于数字类型的列。
(3)MAX()函数返回表达式中的最大值,可以用于数字型、字符型及日期/时间类型的列。
(4) MIN()函数返回表达式中的最小值,可以用于数字型、字符型及日期/时间类型的列。
(4)COUNT()函数返回表达式中非空值的计数,它可以用于数字和字符类型的列。另外,也可以使用星号(*)作为COUNT()函数的表达式,使用星号可以不必指定特定的列而计算所有的行数。
数学函数用于对数值进行代数运算,由于数学函数数量众多,不可能全部列举,这类举例部分
分组查询就是将表中的数据通过GROUPBY子句分类组合,再根据需要得到统计信息。如果需 要对分组结果进行筛选,只显示满足限定条件的组,需要使用HAVING子句。
当GROUP BY子句中使用HAVING子句时,查询结果只返回满足HAVING条件的组。在一个T-SOL 语句中可以有WHERE子句和HAVING子句,HAVING子句与WHERE 子句类似,均用于设置限定条件。 但HAVING子句和WHERE子句的作用有如下区别。
>WHERE子句的作用是在对查询结果进行分组前,根据WHERE条件筛选数据,条件中不能包 含聚合函数。
>HAVING子句的作用是在分组之后筛选满足条件的组,条件中经常包含聚合函数,也可以使 用多个分组标准进行分组。
当WHERE和HAVING同在一个SELECT语句中使用时,执行顺序为“W-ERE→GROUP BY→HAVING”
BDON公司有一台已经安装了 SOL Server 2016的服务器,bdqn数据库中包含products表,表中 内容如下图所示。
1.查询出厂日期晚于2017年4月的水果信息。
2.分组查询所有水果、蔬菜、坚果的总成本。
3.查询所有水果的名称和出厂日期,以特定格式拼接字符串,如“西瓜的出厂日期是: 2017/05/06"。
4.查询所有蔬菜的平均成本。
首先运用SSMS工具把表创建出来,再填入数据,SQL语句如下:
CREATE TABLE products
(
编号 int identity (1,1) primary key,
名称 nvarchar(50) not null,
种类 nvarchar(20) not null,
成本 money not null check(成本>=0),
出厂日期 date not null
)
执行展示
insert products (名称,种类,成本,出厂日期)
values
('西瓜','水果','4.1','2017/05/06'),
('芹菜','蔬菜','1','2017/04/01'),
('番茄','蔬菜','2.9','2017/05/09'),
('黄瓜','蔬菜','2.2','2017/05/05'),
('香蕉','水果','6.1','2017/05/23'),
('核桃','坚果','28.5','2017/03/03'),
('开心果','坚果','38.11','2017/02/22'),
('蓝莓','水果','50.2','2017/05/11')
1. 查询出厂日期晚于2017年4月的水果信息。
SQL语句:select 名称,种类,成本,出厂日期
from products
where 出厂日期 >='2017/05/01' and 种类='水果'
运用了where查找了两个同时的条件达成查找需求。
2.分组查询所有水果、蔬菜、坚果的总成本。
SQL语句:select 种类,sum(成本) as 总成本
from products
group by 种类
运用了聚合函数SUM()求和值总成本和分组查询group by子句组合达成查找需求。
3.查询所有水果的名称和出厂日期,以特定格式拼接字符串。
SQL语句:select 名称+'的出厂日期是' +cast(出厂日期 as varchar(15)) as 出厂日期简介
from products
where 种类='水果'
运用了系统函数和where限制条件组合达成查找需求。
4.查询蔬菜的平均成本。
SQL语句:select 种类,avg(成本) as 蔬菜的平均成本
from products
where 种类<>'坚果'
group by 种类
having avg(成本)<20
先运用聚合函数AVG()求种类的平均成本和where限制条件移除坚果类的平均成本,再结合分组查询group by子句求出蔬菜和水果的平均成本
对于分组结果求出的平均成本,再结合分组查询having 子句移除水果的平均成本,剩下的就是所有蔬菜的平均成本。
至此,完成整个实验需求。