教学思路SQL之入门习题《学生成绩》 六.使用SQL函数
本节课我们来学习使用sql自带的系统函数,完成查询作业。sql系统函数中较常用的,包括字符串函数、日期函数、聚合函数以及其他函数框架下的数据类型转换、自增长函数、空值函数等。后面所指出的几种函数,我们都在前几节的学习中使用过,今天我们着重来学习前两种函数。
字符串函数:
1.charindex():
返回字符串中指定表达式的起始位置,公式为:charindex(‘表达式’,字段名 [,起始位置]) 如 使用charindex(‘小’,name,3)将得到‘小’字在字段name值的第三个字符后中所找到的位置,当name字段的一条记录中没有小字,将返回0.
下面针对此函数出一道之前题:
查询出学生所在的地区是大连的学生信息:
select * from student where charindex('大连',diqu)>0
(注意:使用>0将不包含大连的记录过滤掉)
等同于:select * from student where diqu like'%大连%'
2.left():
公式left(字段名,截取长度)如left(name,4)将截取到name字段中每条记录从左起前4个字符。
查询出所有学生信息的姓氏:
select left(ltrim(name),1) from student
(注意:应使用ltrim()函数除去name字段中所有左侧的空格)
3.right():
用法与left相同,right(name,1)将将截取到name字段中每条记录从右起第1字符。
4.len():
公式为len(字段名),如len(name),将得到每条记录name字段的值的字符长度,不包含尾随空格。
查询出所有学生的名,即不显示姓氏。
select right(rtrim(name),len(ltrim(name))-1) from student
(注意使用rtrim()函数除去掉name的所有右侧空格,然后得到值的字符长度减一个即为要每条记录要截取的长度,这样能成功的得到姓氏是一个字但是名的字数不限制的结果集)
5.lower():
公式为lower(字段名),将得到把字段中所有字母都变为小写的结果集。
查询出所有学生的姓名,如遇到姓名中包含大写的字母,用小写来代替。
lower(name) from student
6.upper():
用法与lower()相同,将得到把字段中所有字母都变为大写的结果集。
7.replace():
用第三个表达式替换在第一个表达式中出现第二个表达式的结果集,如replace(name,‘小’,‘晓’),将name字段中所有的‘小’字替换为‘晓’。
查询出所有学生信息,性别如是‘男’改为‘女’显示。
select replace(sex,'男','女') from student
8.patindex():
公式patindex(值,字段A)返回指定值在字段A中第一次出现的起始位置。
查询出所有学生姓名中带小字的学生信息
select * from student where patindex('%小%',name)>0
等同于:select * from student where name like'%小%'
9.reverse():
公式reverse(字段名),将字段中的值全部翻转。
10.substring():
公式substring(字段A,截取的开始位,截取的长度).
查询出所有的学生的姓氏
select substring(ltrim(name),1,1) from student
日期函数
允许数据类型: timeinterval 表示相隔时间的类型,代码为:
“y“表示“年”
“m“表示“月”
“d“表示“日”
“h“表示“时”
“n“表示“分”
“s“表示“秒”。
1.dateadd():
公式dateadd(时间类型,增量,字段名),如dateadd(M,3,入学时间)在入学时间字段中原来的月份上加3显示。
实现:将地区是大连的学生的入学日期推后5天。
update student set datetime =dateadd(d,5,datetime) where diqu='大连'
2.datediff():
公式dateiff(时间类型,开始时间,结束时间),如select datediff(M,'1988-1-1','2000-1-1')将得到结束时间与开始时间中相差的月份数144。
3.datename():
公式datename(时间类型,字段名),如datename(d,入学时间)将得到所有学生入学当天的日。
实现:查询出所有学生入学当天的月份数。
select datename(M,datetime) from student
得到的月份为05,06,07
4.datepart():
用法与datename()相同,使用此函数完成上述查询
select datepart(M,datetime) from student
得到的月份为5,6,7……,说明将得到日期部分的整数
5.day()、month()、year():
公式为day(字段名)将得到字段中所有的日子,其他用法相同。
使用month()方法实现上述查询
select month(datetime) from student
得到结果与datepart()相同,为整数的月份数。
6.getdate():
得到当前系统时间
7.getutcdate():
得到当前UTC时间
select getdate(),getutcdate()
2009-05-18 16:54:43.560 2009-05-18 08:54:43.560