一、聚合函数
l MAX(最大值)、MIN(最小值)、AVG (平均值)、SUM (和)、COUNT(数量:记录的条数。)
l 聚合函数对null值不计算。
l 如果一行的数据都是null,count(*)包含对空值行、重复行的统计。
COUNT(*) 返回组中的项数。包括 NULL 值和重复项。
COUNT(ALL expression) 对组中的每一行都计算 expression 并返回非空值的数量。
COUNT(DISTINCT expression) 对组中的每一行都计算 expression 并返回唯一非空值的数量。
对于大于 2^31-1 的返回值,COUNT 生成一个错误。这时应使用 COUNT_BIG。
--聚合函数
select * from TblScore
--求英语成绩
select 英语总分=SUM(tEnglish) from TblScore
--求数学总分
select 数学总分=SUM(tMath) from TblScore
--求英语平均分
select 英语平均分=AVG(tEnglish) from TblScore
--有多少条
select 考试总人数=COUNT(*) from TblScore
--英语成绩最高分
select 英语最高分=MAX(tEnglish) from TblScore==================
--聚合函数不要随意加列m容易出错,只有一行也不行
select tSId,MAX(tEnglish) tMath from TblScore
===================================
select tSId,tSName+tSGender+tSAddress as信息 from TblStudent
update TblScore settEnglish=93 where tScoreId=2
select SUM(tEnglish) from TblScore
select AVG(tEnglish) from TblScore
select COUNT(tEnglish) from TblScore
二、带条件的查询
l Select…from…where …
l Between…and …在之间
建议:优先使用between … and …,而不是“列>=值1 and 列<=值2 ”,between … and …已做过优化处理,效率高。
--查询没有及格的学生的学号
select tScoreId fromTblScore where tMath<60
--查询年龄在-30岁之间的男学生
select * from TblStudent where tSAge>20 and tSAge<30 and tSGender='男'
select * from TblStudent where tSAge between 20 and 30—这个简单
=============================
select * from Customers
select * from Customers where Country='UK' or Country='USA'
select * from Customers where Country in('UK','USA')
三、模糊查询(都是针对字符串操作的)
l 模糊查询关键字 like
Select * from student where sName like '张%'
所有姓张的都查询到,现在我想查询姓张并且名字是一个字的学生
Select * from student where sName like ‘%亮%’
l _ 、 % 、 [] 、 ^ --这些通配符
l ^只有MSSQL Server支持,其他DBMS用not like。
l 通配符 %多字符匹配的通配符,它匹配任意次数(零或多个)出现的任意字符
l 通配符_ 单字符匹配,它匹配单个出现的字符
l [] 只匹配一个字符 并且这个字符必须是[]范围内的 [0-9] [a-z]
l not与like一起使用:not like ….
要通配_、%、[、^这些字符怎么办?[_]、[%]、[ [ ]、^(不需要放到中括号里,因为^只有放到中括号中才认为是通配符)
--模糊查询
select * from tblstudent
--找张什么什么的
--%表示任意字符多个字
select * from TblStudent where tSName like '张%'
--(-)表示任意字符一次
select * from TblStudent where tSName like '张__'
select * from TblStudent where tSName like '张%' and LEN(tSName)=3
select * from TblStudent where tSName like '张[a-z]_'
select * from TblStudent where tSName like '张[0-9]_‘
select * from TblStudent where tSName like'张[^0-9]_‘
select * from TblStudent where tSName like '张%[%]%‘
select * from TblStudent where tSName like'张%[_]%'
四、空值处理
l 数据库中,一个列如果没有指定值,那么值就为null,数据库中的null表示“不知道”,而不是表示没有。因此select null+1结果是null,因为“不知道”加1的结果还是“不知道”。
l select * fromscore where english = null ;
l select * fromscore where english != null ;都没有任何返回结果,因为数据库也“不知道”。
l SQL中使用is null、is not null来进行空值判断: select *from score where english is null ; select *from score where english is not null ;
select * from TblScore where tEnglish is null 查null
select * from TblScore where tEnglish is not null 查不是null
五、数据排序
l ORDER BY子句位于SELECT语句的末尾,它允许指定按照一个列或者多个列进行排序,还可以指定排序方式是升序(从小到大排列,ASC)还是降序(从大到小排列,DESC)。
l 按照年龄升序排序所有学生信息的列表:SELECT * FROM Student ORDER BY sAge ASC
l 按照英语成绩从大到小排序,如果英语成绩相同则按照数学成绩从大到小排序 :SELECT * FROM Score ORDER BY english DESC,math DESC
l ORDER BY子句要放到WHERE子句之后 : SELECT * FROM Score where english>=60 and math>=60ORDER BY english DESC,math DESC
l Order by 语句一般要放到所有语句的后面,就是先让其他语句进行筛选,全部筛选完成后,最后排序一下。
l 表中数据是集合,集合是没有顺序的。Order by 返回的数据是有顺序的,故此我们把order by 以后返回的数据集合叫“游标”。
--英语成绩高的按数学成绩拍
select *from TblScore order by tEnglish desc,tMath desc
--按照总分来排,用的是表达式,如果为null最后了
select *from TblScore order by (tEnglish+tMath) desc
select *,总分=(tEnglish+tMath) from TblScoreorder by (tEnglish+tMath) desc
Order by所有语句写在最后,可以写表达式
六、数据分组
l 在使用select查询的时候,有时需要对数据进行分组汇总(即:将现有的数据按照某列来汇总统计),这时就需要用到group by语句。select 语句中可以使用group by 子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息。//分组一般都和聚合函数连用。
l GROUP BY子句必须放到WHERE语句的之后 ,Group By与Order By都是对筛选后的数据进行处理,而Where是用来筛选数据的。
l 没有出现在GROUP BY子句中的列是不能放到SELECT语句后的列名列表中的 (聚合函数中除外)
l 错误: select sClassId,count(sName),sAge from student group by sClassId
l 正确: select sClassId,count(sName),avg(sAge) from student group by sClassId
select tSClassIdas 班级id, COUNT(*) as班级人--对组进行统计
from TblStudentgroup by tSClassId
================================
select tSClassIdas 班级id,
COUNT(*) as班级人数
from TblStudentwhere tSGender='男'group by tSClassId
====================================
select tSClassId, count(*)as 人数 from TblStudent groupby tSClassIdhavingCOUNT(*)>5
--分组前筛选用where 分组后筛选用having
================================
备注1:
select tSClassId as 班级Id, count(*) as 班级人数from TblStudent GROUPby TSClassId
备注2:
select
tSClassIdas 班级Id,
count(*) as 班级人数
from TblStudent
where tSGender='男'
group byTSClassId
可以使用having子句限制返回的结果集。group by 子句可以将查询结果分组,并返回行的汇总信息. 按照group by 子句中指定的表达式的值分组查询结果。
--当在一个查询语句中使用group by语句的时候,
--在select语句的选择列里面,只能包含group by 语句中出现的列,或者是聚合函数,
--不能包括其他列。
七、Having语句(对组的筛选)
l 对表中的数据分组后,会得到一个分组后的结果集,如何对该结果集在进行筛选?→ having
l 查询班级人数超过三个人的班级。(见备注1)
l 注意Having中不能使用未参与分组的列,Having不能替代where。作用不一样,Having是对组进行过滤。
l Having 是Group By的条件对分组后的数据进行筛选(与Where类似,都是筛选,只不过having是用来筛选分组后的组的。)
l 在Where中不能使用聚合函数,必须使用Having,Having要位于Group By之后。
l Having的使用几乎是与where一样的,也可以用in。
• Having count(*) in (5,8,10)
备注1:
select
tSClassId as 班级Id,
count(*) as 班级人数
from TblStudent
group by TSClassId
having count(*)>3
========================================
select sClassId,count(sName) from student where count(sName)>3 group by sClassId
聚合函数不应出现在WHERE 子句中
select sClassId,count(sName) from student group by sClassId having count(sName)>3
Group by 前可以有where,是对筛选过后的数据进行分组
select sClassId,count(sName) from student where sSex='男' groupby sClassId
select sClassId,count(sName) from student group by sClassId having sAge>30
//错,having是对分组后信息的过滤,能用的列和select中能用的列是一样。
//having无法代替where。
八、SQL语句执行顺序
1.FROM
2.ON
3.JOIN
4.WHERE
5.GROUP BY
6.WITH CUBE 或 WITH ROLLUP
7.HAVING
8.SELECT
9.DISTINCT
10.ORDER BY
11.TOP
九、类型转换
l CAST ( expressionAS data_type)
l CONVERT ( data_type, expression,[style])
l Select ‘您的班级编号’+ 1 //错误这里+是数学运算符
l 对日期的转换。转换成各种国家格式的日期。
l • select convert(varchar(20),getdate(),104)
• Style的格式,查sql帮助。(输入convert函数查询)
• 将日期转换为指定格式的字符串。日期→字符串
select '日期为'+99
select '考试成绩为'+ cast(99 as varchar(10));
select '考试成绩为'+CONVERT(varchar(10),99);
select * from T2
update T2 set uname='凤姐'
select * from T2 order by convert(int, uId) desc
======================================
select GETDATE()
select CONVERT(nvarchar(10),GETDATE(),120)
select isnull(convert(varchar(10),tEnglish),'缺考')from TblScore
select '平均成绩是' + cast(30 as varchar(3))
select cast(9.85as int) 舍去小数
ROUND() 4舍5入
在SQL语句中,两个连续的 单引号 ,表示 一个单引号 。(单引号的转义符。)
select convert(varchar(100),getdate(),20)
select convert(varchar(100),getdate(),21)
select convert(varchar(100),getdate(),23)
Syntax for CAST:CAST ( expression AS data_type [ (length ) ])
Syntax for CONVERT:CONVERT ( data_type [ ( length ) ] , expression [ , style ])
=========================================================
扩展知识—自己学习
SELECT FIdNumber,
CAST(RIGHT(sNo,3)AS INTEGER) as 后三位的整数形式,
CAST(RIGHT(sNo,3)AS INTEGER)+1 as 后三位加1,
CONVERT(INTEGER,RIGHT(sNo,3))/2as 后三位除以2
FROM student
对编号排序,但编号是字符串类型。1、2、11、3、21、36…
十、联合结果集union(集合运算符)
l 集合运算符是对两个集合操作的,两个集合必须具有相同的列数,列具有相同的数据类型(至少能隐式转换的),最终输出的集合的列名由第一个集合的列名来确定。(可以用来连接多个结果)
l 联合(union)与连接(join)不一样
l 简单的结果集联合(老师、学生):
select tName,tSex from teacher union select sName,sSex from student
l 基本的原则:每个结果集必须有相同的列数;每个结果集的列必须类型相容。
select tName,tSex,-1 from teacher union select sName,sSex,sClassId from student
l 联合:将多个结果集合并成一个结果集。union(去除重复,相当于默认应用了distinct)、union all
UNION 去除重复数据 UNION ALL不会去除
用union一次插入多条数据
insert into Score(studentId,english,math)
select 1,80,100 union all
select 1,80,100 union all
select 3,50,59 union all
select 4,66,89 union
select 5,59,100
此处如果用union all同样会去除重复数据。
十一、一次插入多条数据
l --把现有表的数据插入到新表(表不能存在),为表建备份。
l --select * intonewStudent from student(newStudent表在select查询的同时自动建立。)
• --把现有表的数据复制到一个已存在的表
• 通过这种方式复制,只能复制表中的数据,以及列的名字和数据类型。对于约束,不会复制过来。
l Select * intonewTbl from oldTbl where 1<>1,这样做可以只复制表结构,但效率并不高。建议:select top 0 *into newTbl from oldTbl
l =========如果表已经存在了===============
• --insert into backupStudent select * fromstudents(backupStudent表必须提前建好)
十二、日期函数
l GETDATE() :取得当前日期时间
l DATEADD (datepart ,number, date ),计算增加以后的日期。参数date为待计算的日期;参数number为增量;参数datepart为计量单位,可选值见备注。DATEADD(DAY,3,date)为计算日期date的3天后的日期,而DATEADD(MONTH,-8,date)为计算日期date的8个月之前的日期 。
• (入职一年以上的员工发1000$),入职日期+1年<当前时间
• Sql2005中只有DateTime类型,2008中有date、datetime、datetime2 等类型。
l DATEDIFF ( datepart ,startdate , enddate ) :计算两个日期之间的差额。 datepart 为计量单位,可取值参考DateAdd。
l 统计不同入学年数的学生个数:
• select DateDiff(year,sInDate,getdate()),count(*)from student Group by DateDiff(year,sInDate,getdate())
l DATEPART (datepart,date):返回一个日期的特定部分
l Month()、year()、day()来代替。
l 统计学生的生日年份个数:
• select DatePart(year,sBirthday),count(*)
• from student
• group by DatePart(year, sBirthday)
一、聚合函数
l MAX(最大值)、MIN(最小值)、AVG (平均值)、SUM (和)、COUNT(数量:记录的条数。)
l 聚合函数对null值不计算。
l 如果一行的数据都是null,count(*)包含对空值行、重复行的统计。
COUNT(*) 返回组中的项数。包括 NULL 值和重复项。
COUNT(ALL expression) 对组中的每一行都计算 expression 并返回非空值的数量。
COUNT(DISTINCT expression) 对组中的每一行都计算 expression 并返回唯一非空值的数量。
对于大于 2^31-1 的返回值,COUNT 生成一个错误。这时应使用 COUNT_BIG。
--聚合函数
select * from TblScore
--求英语成绩
select 英语总分=SUM(tEnglish) from TblScore
--求数学总分
select 数学总分=SUM(tMath) from TblScore
--求英语平均分
select 英语平均分=AVG(tEnglish) from TblScore
--有多少条
select 考试总人数=COUNT(*) from TblScore
--英语成绩最高分
select 英语最高分=MAX(tEnglish) from TblScore==================
--聚合函数不要随意加列m容易出错,只有一行也不行
select tSId,MAX(tEnglish) tMath from TblScore
===================================
select tSId,tSName+tSGender+tSAddress as信息 from TblStudent
update TblScore settEnglish=93 where tScoreId=2
select SUM(tEnglish) from TblScore
select AVG(tEnglish) from TblScore
select COUNT(tEnglish) from TblScore
二、带条件的查询
l Select…from…where …
l Between…and …在之间
建议:优先使用between … and …,而不是“列>=值1 and 列<=值2 ”,between … and …已做过优化处理,效率高。
--查询没有及格的学生的学号
select tScoreId fromTblScore where tMath<60
--查询年龄在-30岁之间的男学生
select * from TblStudent where tSAge>20 and tSAge<30 and tSGender='男'
select * from TblStudent where tSAge between 20 and 30—这个简单
=============================
select * from Customers
select * from Customers where Country='UK' or Country='USA'
select * from Customers where Country in('UK','USA')
三、模糊查询(都是针对字符串操作的)
l 模糊查询关键字 like
Select * from student where sName like '张%'
所有姓张的都查询到,现在我想查询姓张并且名字是一个字的学生
Select * from student where sName like ‘%亮%’
l _ 、 % 、 [] 、 ^ --这些通配符
l ^只有MSSQL Server支持,其他DBMS用not like。
l 通配符 %多字符匹配的通配符,它匹配任意次数(零或多个)出现的任意字符
l 通配符_ 单字符匹配,它匹配单个出现的字符
l [] 只匹配一个字符 并且这个字符必须是[]范围内的 [0-9] [a-z]
l not与like一起使用:not like ….
要通配_、%、[、^这些字符怎么办?[_]、[%]、[ [ ]、^(不需要放到中括号里,因为^只有放到中括号中才认为是通配符)
--模糊查询
select * from tblstudent
--找张什么什么的
--%表示任意字符多个字
select * from TblStudent where tSName like '张%'
--(-)表示任意字符一次
select * from TblStudent where tSName like '张__'
select * from TblStudent where tSName like '张%' and LEN(tSName)=3
select * from TblStudent where tSName like '张[a-z]_'
select * from TblStudent where tSName like '张[0-9]_‘
select * from TblStudent where tSName like'张[^0-9]_‘
select * from TblStudent where tSName like '张%[%]%‘
select * from TblStudent where tSName like'张%[_]%'
四、空值处理
l 数据库中,一个列如果没有指定值,那么值就为null,数据库中的null表示“不知道”,而不是表示没有。因此select null+1结果是null,因为“不知道”加1的结果还是“不知道”。
l select * fromscore where english = null ;
l select * fromscore where english != null ;都没有任何返回结果,因为数据库也“不知道”。
l SQL中使用is null、is not null来进行空值判断: select *from score where english is null ; select *from score where english is not null ;
select * from TblScore where tEnglish is null 查null
select * from TblScore where tEnglish is not null 查不是null
五、数据排序
l ORDER BY子句位于SELECT语句的末尾,它允许指定按照一个列或者多个列进行排序,还可以指定排序方式是升序(从小到大排列,ASC)还是降序(从大到小排列,DESC)。
l 按照年龄升序排序所有学生信息的列表:SELECT * FROM Student ORDER BY sAge ASC
l 按照英语成绩从大到小排序,如果英语成绩相同则按照数学成绩从大到小排序 :SELECT * FROM Score ORDER BY english DESC,math DESC
l ORDER BY子句要放到WHERE子句之后 : SELECT * FROM Score where english>=60 and math>=60ORDER BY english DESC,math DESC
l Order by 语句一般要放到所有语句的后面,就是先让其他语句进行筛选,全部筛选完成后,最后排序一下。
l 表中数据是集合,集合是没有顺序的。Order by 返回的数据是有顺序的,故此我们把order by 以后返回的数据集合叫“游标”。
--英语成绩高的按数学成绩拍
select *from TblScore order by tEnglish desc,tMath desc
--按照总分来排,用的是表达式,如果为null最后了
select *from TblScore order by (tEnglish+tMath) desc
select *,总分=(tEnglish+tMath) from TblScoreorder by (tEnglish+tMath) desc
Order by所有语句写在最后,可以写表达式
六、数据分组
l 在使用select查询的时候,有时需要对数据进行分组汇总(即:将现有的数据按照某列来汇总统计),这时就需要用到group by语句。select 语句中可以使用group by 子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息。//分组一般都和聚合函数连用。
l GROUP BY子句必须放到WHERE语句的之后 ,Group By与Order By都是对筛选后的数据进行处理,而Where是用来筛选数据的。
l 没有出现在GROUP BY子句中的列是不能放到SELECT语句后的列名列表中的 (聚合函数中除外)
l 错误: select sClassId,count(sName),sAge from student group by sClassId
l 正确: select sClassId,count(sName),avg(sAge) from student group by sClassId
select tSClassIdas 班级id, COUNT(*) as班级人--对组进行统计
from TblStudentgroup by tSClassId
================================
select tSClassIdas 班级id,
COUNT(*) as班级人数
from TblStudentwhere tSGender='男'group by tSClassId
====================================
select tSClassId, count(*)as 人数 from TblStudent groupby tSClassIdhavingCOUNT(*)>5
--分组前筛选用where 分组后筛选用having
================================
备注1:
select tSClassId as 班级Id, count(*) as 班级人数from TblStudent GROUPby TSClassId
备注2:
select
tSClassIdas 班级Id,
count(*) as 班级人数
from TblStudent
where tSGender='男'
group byTSClassId
可以使用having子句限制返回的结果集。group by 子句可以将查询结果分组,并返回行的汇总信息. 按照group by 子句中指定的表达式的值分组查询结果。
--当在一个查询语句中使用group by语句的时候,
--在select语句的选择列里面,只能包含group by 语句中出现的列,或者是聚合函数,
--不能包括其他列。
七、Having语句(对组的筛选)
l 对表中的数据分组后,会得到一个分组后的结果集,如何对该结果集在进行筛选?→ having
l 查询班级人数超过三个人的班级。(见备注1)
l 注意Having中不能使用未参与分组的列,Having不能替代where。作用不一样,Having是对组进行过滤。
l Having 是Group By的条件对分组后的数据进行筛选(与Where类似,都是筛选,只不过having是用来筛选分组后的组的。)
l 在Where中不能使用聚合函数,必须使用Having,Having要位于Group By之后。
l Having的使用几乎是与where一样的,也可以用in。
• Having count(*) in (5,8,10)
备注1:
select
tSClassId as 班级Id,
count(*) as 班级人数
from TblStudent
group by TSClassId
having count(*)>3
========================================
select sClassId,count(sName) from student where count(sName)>3 group by sClassId
聚合函数不应出现在WHERE 子句中
select sClassId,count(sName) from student group by sClassId having count(sName)>3
Group by 前可以有where,是对筛选过后的数据进行分组
select sClassId,count(sName) from student where sSex='男' groupby sClassId
select sClassId,count(sName) from student group by sClassId having sAge>30
//错,having是对分组后信息的过滤,能用的列和select中能用的列是一样。
//having无法代替where。
八、SQL语句执行顺序
1.FROM
2.ON
3.JOIN
4.WHERE
5.GROUP BY
6.WITH CUBE 或 WITH ROLLUP
7.HAVING
8.SELECT
9.DISTINCT
10.ORDER BY
11.TOP
九、类型转换
l CAST ( expressionAS data_type)
l CONVERT ( data_type, expression,[style])
l Select ‘您的班级编号’+ 1 //错误这里+是数学运算符
l 对日期的转换。转换成各种国家格式的日期。
l • select convert(varchar(20),getdate(),104)
• Style的格式,查sql帮助。(输入convert函数查询)
• 将日期转换为指定格式的字符串。日期→字符串
select '日期为'+99
select '考试成绩为'+ cast(99 as varchar(10));
select '考试成绩为'+CONVERT(varchar(10),99);
select * from T2
update T2 set uname='凤姐'
select * from T2 order by convert(int, uId) desc
======================================
select GETDATE()
select CONVERT(nvarchar(10),GETDATE(),120)
select isnull(convert(varchar(10),tEnglish),'缺考')from TblScore
select '平均成绩是' + cast(30 as varchar(3))
select cast(9.85as int) 舍去小数
ROUND() 4舍5入
在SQL语句中,两个连续的 单引号 ,表示 一个单引号 。(单引号的转义符。)
select convert(varchar(100),getdate(),20)
select convert(varchar(100),getdate(),21)
select convert(varchar(100),getdate(),23)
Syntax for CAST:CAST ( expression AS data_type [ (length ) ])
Syntax for CONVERT:CONVERT ( data_type [ ( length ) ] , expression [ , style ])
=========================================================
扩展知识—自己学习
SELECT FIdNumber,
CAST(RIGHT(sNo,3)AS INTEGER) as 后三位的整数形式,
CAST(RIGHT(sNo,3)AS INTEGER)+1 as 后三位加1,
CONVERT(INTEGER,RIGHT(sNo,3))/2as 后三位除以2
FROM student
对编号排序,但编号是字符串类型。1、2、11、3、21、36…
十、联合结果集union(集合运算符)
l 集合运算符是对两个集合操作的,两个集合必须具有相同的列数,列具有相同的数据类型(至少能隐式转换的),最终输出的集合的列名由第一个集合的列名来确定。(可以用来连接多个结果)
l 联合(union)与连接(join)不一样
l 简单的结果集联合(老师、学生):
select tName,tSex from teacher union select sName,sSex from student
l 基本的原则:每个结果集必须有相同的列数;每个结果集的列必须类型相容。
select tName,tSex,-1 from teacher union select sName,sSex,sClassId from student
l 联合:将多个结果集合并成一个结果集。union(去除重复,相当于默认应用了distinct)、union all
UNION 去除重复数据 UNION ALL不会去除
用union一次插入多条数据
insert into Score(studentId,english,math)
select 1,80,100 union all
select 1,80,100 union all
select 3,50,59 union all
select 4,66,89 union
select 5,59,100
此处如果用union all同样会去除重复数据。
十一、一次插入多条数据
l --把现有表的数据插入到新表(表不能存在),为表建备份。
l --select * intonewStudent from student(newStudent表在select查询的同时自动建立。)
• --把现有表的数据复制到一个已存在的表
• 通过这种方式复制,只能复制表中的数据,以及列的名字和数据类型。对于约束,不会复制过来。
l Select * intonewTbl from oldTbl where 1<>1,这样做可以只复制表结构,但效率并不高。建议:select top 0 *into newTbl from oldTbl
l =========如果表已经存在了===============
• --insert into backupStudent select * fromstudents(backupStudent表必须提前建好)
十二、日期函数
l GETDATE() :取得当前日期时间
l DATEADD (datepart ,number, date ),计算增加以后的日期。参数date为待计算的日期;参数number为增量;参数datepart为计量单位,可选值见备注。DATEADD(DAY,3,date)为计算日期date的3天后的日期,而DATEADD(MONTH,-8,date)为计算日期date的8个月之前的日期 。
• (入职一年以上的员工发1000$),入职日期+1年<当前时间
• Sql2005中只有DateTime类型,2008中有date、datetime、datetime2 等类型。
l DATEDIFF ( datepart ,startdate , enddate ) :计算两个日期之间的差额。 datepart 为计量单位,可取值参考DateAdd。
l 统计不同入学年数的学生个数:
• select DateDiff(year,sInDate,getdate()),count(*)from student Group by DateDiff(year,sInDate,getdate())
l DATEPART (datepart,date):返回一个日期的特定部分
l Month()、year()、day()来代替。
l 统计学生的生日年份个数:
• select DatePart(year,sBirthday),count(*)
• from student
• group by DatePart(year, sBirthday)