教学思路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

posted @ 2011-11-01 16:54  星月磊子  阅读(163)  评论(0编辑  收藏  举报