教学思路SQL之入门习题《学生成绩》 六.使用SQL函数-阿里云开发者社区

开发者社区> 数据库> 正文
登录阅读全文

教学思路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()
本文转自叶子文文博客51CTO博客,原文链接http://blog.51cto.com/leafwf/185776如需转载请自行联系原作者

叶子文文

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章
最新文章
相关文章