数据库中的函数

之前介绍了

接下来介绍一下数据库中的函数

  • 函数举例,将查询的字母全部转变成小写和大写:select lower(username), upper(username) from 表名;
  • 函数的功能:封装了特定的一些功能,我们直接拿过来使用,可以实现对应的功能。
  • 函数的作用:为了实现select查询的效率和能力。
  • 注意:函数并没有改变数据自身的值,而是在真实数据上面进行加工和处理,展示新的结果而已。

接下来说一些常用函数(函数可以分为两类,单行函数和多行函数。除了多行函数都是单行函数):

  • 单行函数:对每一条记录都进行计算,并得到相应的结果。
    • lower:转换成小写字母
    • upper:转换成大写字母
  • 多行函数(只有5个):对一组记录进行计算,并得到一行结果。多行函数会自动忽略null值,因此使用count统计个数的时候,需要找不为空的列,或者是count(*)、count(1)。max、min、count针对所有类型都可以,但是sum、avg只针对数值类型有效。
    • sum:某一列求和,用法:select sum(列名) from 表名;
    • avg:某一列求平均,用法:select avg(列名) from 表名;,其实就是sum/count,所以这里要注意,为null的时候,不进行计算。
    • max某一列求最大值,用法:select max(列名) from 表名;
    • min某一列求最小值,用法:select min(列名) from 表名;
    • count某一列有多少行。如果是null的话,则不进行计数。用法:select count(列名) from 表名;

接下来介绍一些常用单行函数:

  • 字符串函数
    • length:获取字符串长度,获取一列的字符个数。用法:select length(列名) from 表名;
    • substring:字符串截取,截取一列部分字符,从一个位置开始,长度(开始位置的下标是从1开始)。用法:select substring(列名,开始下标,长度);
  • 数值函数
    • abs:绝对值,获取一列的绝对值。用法:select abs(列名) from 表名;
    • ceil:向上取整,对一列进行向上取整。用法:select ceil(列名) from 表名;
    • floor:向下取整,对一列进行向下取整。用法:select floor(列名) from 表名;
    • round:四舍五入,对一列进行四舍五入。用法:select round(列名) from 表名;
    • mod:取模,将一列对x进行取模,或者是列名%值x。用法:select mod(列名,值x) from 表名;
  • 日期与时间函数(插入数据的时候,如果是使用年月日时分秒获取当前时间,那么插入的结果还是要参考列的定义是date,还是time,还是datetime)
    • curdate:获取当前日期(年月日)。用法:select curdate;注意这里使用的伪表的用法。
    • curtime:获取当前时间(时分秒)。用法:select curtime;注意这里使用的伪表的用法。
    • now:获取当前时间(年月日时分秒),执行第一个now的时间,也是所有的now的时间。用法:select now();
    • sysdate:获取函数执行的时间(年月日时分秒),每次执行sysdate都会去重新获取系统时间。用法:select sysdate();,下面的例子能更好的解释。
      • select now(), sysdate(), sleep(3) now(), sysdate();这时候两个now的结果是一样的,但是sysdate的时间是差三秒。
  • 流程函数
    • if:判断然后输出。用法:select if(列的逻辑判断,‘判断成功的输出’,‘判断失败的输出’) from 表名;
    • ifnull:判断如果是null的时候,进行一些操作。用法:select 列名1 + ifnull(列名2,0) from 表名;,如果列名2中有null,则会变成0,因为不这样的话null+任何值都会变成null。解决8.DQL查询操作中的两列相加问题。
    • nullif:判断两列是不是一致,如果一致,则返回null,否则返第一个值。用法:select nullif(列名1, 列名2) from 表名;如果一行中对应的内容相等,则返回null,否则返回列名1中对应的内容。
    • case when then:多分枝,等值判断,类似于switch。用法:select case 列名 when ‘value1’ then ‘值1’ when ‘value2’ then ‘值2’ …else ‘其他’ end from 表名;,也就是说,当这一列的值为value1的时候,就输出值1,当为value2的时候,就输出值2…,最后所有的when后面的条件都不满足时,则输出其他,并且end表示结尾的意思。
    • case when then:多分枝,区间判断。用法:select case when 列名的条件1 then ‘值1’ when 列名的条件2 then ‘值2’ …else ‘其他’ end from 表名;,也就是说,当这一列的值满足条件1的时候,就输出值1,当这一列的值满足条件2的时候,就输出值2…,最后所有的when后面的条件都不满足时,则输出其他,并且end表示结尾的意思。
  • 其他函数
    • database:当前使用的数据库。用法:select database() from dual;,注意这里使用了伪表,并且from dual可以省略。
    • user:当前登录的用户。用法:select user() from dual;,注意这里使用了伪表,并且from dual可以省略。
    • version:当前数据库的版本。用法:select version() from dual;,注意这里使用了伪表,并且from dual可以省略。

接下来再说一下伪表的使用:而例如我们不是需要查询表,是使用sql语句进行一些计算的时候,这时候可以使用伪表,下面的例子可以参考。

  • 在我们执行sql,实现对3.14进行round,select round(3.14) from 表名,这时候必须输入一个表名,但是如果你输入的这个表有好多字段,那么就会查询到好多行round(3.14)。这时候我们就可以使用伪表,即执行的sql为:select round(3.14) from dual;,其中dual就是伪表。并且如果没有where的话,from dual可以省略不写,即执行select round(3.14);。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值