• SQL控制语句中内置函数讲解


    一、伪表。系统内置的只有一行一列数据的表。常用来执行函数。

                select 函数名 from dual

    注:以下所有函数为了方便理解均用 伪表 做为事例!

    二、 时间函数

    1.sysdate:获取数据库系统的当前时间

    例:select sysdate from dual 我们就会获取到当前系统的时间

    2.add_months:对日期的月份进行加减

      select add_months(日期, 数值) from dual

      在这里的数值是必须要写的,如果不想对日期进行加减我们可以把数值写成0!

    例:select add_months(sysdate, 1) from dual

      此时我取到了当前的时间

      如果数值写成1,那么我得出的时间的月份就是当前月份+1;

      如果数值写成0,那么我得出的时间的月份就是当前月份;

      如果数值写成-1,那么我得出的时间的月份就是当前月份-1;           

    3.last_day:获取日期所在月份的最后一天

      select last_day(日期) from dual

      这个日期必须是date类型的,所以如果我们直接输入一个日期例如2012/3/3,它是会报错的,所以我们就要给日期进行转换把原本是char类型的数值转换为date类型。

    转换方式:select last_day(to_date('2012/3/3', 'yyyy/mm/dd')) from dual (在这里不过多叙述下面会细讲)

       select last_day(sysdate) from dual

    这样我们就会取到当前月份的最后一天。

    三、转换函数

    1.to_date:把特定格式的字符串转换成日期型数据

    例:select to_date('字符串', 'yyyy/mm/dd hh24:mi:ss') from dual 

       select to_date('2010/3/5 12:12:12', 'yyyy/mm/dd hh24:mi:ss') from dual

    当我想用12小时制是我就不需要写24,直接hh就可以了。当然前面的小时数值要在1-12之间

    2.to_char:把其他数据类型转换成特定格式的字符串类型

    例:select to_char('日期型数据', 'yyyy/mm/dd hh24:mi:ss') from dual

      select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual

    to_char 一般会用在时间的提取以及年龄的计算上,这是我们把日期型数据转变成我们想要的年份、月份。我们可以只写yyyy这要就只转换成了年份。

    3.cast:通用转换函数

    例:select cast(数据源 as 数据类型(长度)) from dual

    四:数值函数

    1.abs:求绝对值

    例:select abs(-1) from dual

      求出的值为1

    2.mod:求模(求余数)

    例:select mod(m,n) from dual

      表示m/n的余数

    3.ceil:求上限值

    例:select ceil(9.1) from dual

      它的上限值就是10,

    4.floor:求下限值

    例:select floor(9.1) from dual

      它的下限值就是9,

    (上限值与下限值就是最接近它的正数值)

    5.round:四舍五入(从小数点后第一位开始四舍五入)

    例:select round(9.499) from dual

      四舍五入后是9

    例:select round(m, n) from dual

      当n>0时,保留小数点后n位

      例:select round(9.499, 2) from dual

        就是9.499四舍五入后保留小数点后两位数

      当n = 0,四舍五入后取整  

      例:select round(9.499, 0) from dual

        四舍五入后是9

      当n < 0,小数点前n位变0并四舍五入

      例:select round(7.499, -1) from dual

        直接从小数点前第一位开始四舍五入,结果是10

    6.trunc取整数,直接舍去小数点后面的。

    例:select trunc(90.99) from dual

      舍去后面小数取整就是90

    例:select trunc(m, n) from dual

      n > 0,保留小数点后n位

      例:select trunc(90.99, 1) from dual

      那么保留一位后结果就是90.9

      n = 0,直接取整

      例:select trunc(90.99, 0) from dual

      相当于 trunc(90.99)结果是90

      n < 0,小数点前n位变0

      例:select trunc(90.99, -1) from dual

      那么结果就是90。 如果是-2的话结果就是0

    五:字符串函数

    1.length:获取字符串长度  

    例:select length(' ') from dual

    2.trim 去除字符串的左右空格

    例:select trim(' ') from dual

     ltrim 去除字符串的左空格

    例:select ltrim(' ') from dual

     rtrim 去除字符串的右空格

    例:select rtrim(' ') from dual

    3.replace:查找并替换字符串

    例:select replace('要替换的字符串', '字符串中要被清除的内容') from dual;

       要替换的字符串也可以写成字段的名称

      例:select replace('中文', '文') from q; / select replace(A, '文') from q;

        输出结果便是中。

    例:select replace('要替换的字符串',  '要被替换的内容', '新内容') from dual;

      要替换的字符串也可以写成字段的名称

      例:select replace('中文', '文', '国') from q; / select replace('A', '文', '国') from q;

        意思是把   '文'字替换成'国'字'    输出结果便是中国。

    4.查找字符串并返回首个的位置

    特点:字符串的首位从开始、未找到的返回值是0

    例:select instr('字符源', '要查找的字符串') from q;

      字符源也可以写成字段的名称  

        例:select instr('中文', '文') from q; / select instr(A, 's') from q;

         前者输出结果便是2,因为文在其字段中的位置是2。后者输出结果是0,疑问在字段中没有找的's'。

    5.substr:截取字符串

    特点:开始位置>=0,从左开始计算位置。开始位置<0,从右开始计算位置。

    例:select substr('要截取的字符串', '开始位置') from q;

      select substr('中文', '1') from q;

      从左边第一个字符开始截取,那么截取后的结果就是'中文'

      select substr('中文', '-1') from q;

      从右边第一个字符开始截取,那么截取后的结果就是'文'

    (注意都是从左往右截取,只是起始位置不一样而已)

    六:替换函数

    1.nvl:把null替换成默认值

    用法:select nvl('字段名', '默认值') from q;

    2.nvl2: 把null替换成默认值,把非空替换成新的值

    用法:select nvl2('字段名', '非空的新值', '为空的默认值') from q;

    3.decode:匹配字段的值并替换成新的值

    用法:select decode(字段名, 值1, 新值1, 值2, 新值2,...,缺省值) from q;

    七:聚合函数:

    1.count('字段名') 或 count(字段序列号) 或 count(*) 此方法效率低:统计符合条件的字段内容非空的数据条数;

    2.avg('字段名'):统计符合条件的数值类型字段内容非空的数据的平均值;

    3.sum('字段名'):统计符合条件的数值类型字段内容非空的数据的合计数;

    4.max('字段名'):获取数据集合中某字段的最大值;

    5.min('字段名'):获取数据集合中某字段的最小值;

     分页:

    select * from (select a.*, rownum rn from (select * from student) a where rownum <=(pageNum*pageSize)) where rn>(pageNum-1)*pageSize;

  • 相关阅读:
    日本美女自拍大赛作品欣赏 最后一张看醉了
    BERT(Bidirectional Encoder Representations from Transformers)理解
    P-R曲线及与ROC曲线区别
    残差网络(Residual Network)
    Attention is all you need 论文详解(转)
    联合建模心得
    拒绝推断问题(转)
    关联规则简述
    pycharts实现可视化
    CRF++进行中文分词实例
  • 原文地址:https://www.cnblogs.com/AnswerTheQuestion/p/6188868.html
Copyright © 2020-2023  润新知