zoukankan      html  css  js  c++  java
  • 数据库MySQL--常见函数

    例子文件:https://files.cnblogs.com/files/Vera-y/myemployees.zip

    函数:将一组逻辑语句封装在函数体中,对外暴露函数名

    调用:select 函数名() from 表;(若用到表中的字段则家上‘from 表’)

    函数分类:   1.单行函数(例:concate、length、ifnull)

          2.分组函数(统计函数,聚合函数,组函数):做统计使用的(传入一组值,返回一个值)

    单行函数:

    一、字符函数

    1.length: 获取参数值的字节数

      select length('john');  结果:4

      select length('张三丰hahaha');  结果:15

    2.cancat:拼接字符串

      select cancat('a','b','c'); 结果:abc

    3.upper(都变大写)、lower(都变为小写)

      select upper('john');   结果:JOHN

      select lower('JOhn');   结果: john

      例:select concat(upper('hello'), lower('JOHN'));   结果:HELLOjohn

    4.substr(同substring): 索引截取字符串(默认从1开始索引

      select substr('指定字符串拉布拉多不拉多',8)  as out_put;  结果:拉多不拉多

      select substr('指定字符串拉布拉多不拉多',3,4)  as out_put;  结果:字符串拉    # 表示从3位置开始索引,索引4个字符

    5.instr: 返回子字符串在字符串中的起始索引,若子字符串不在字符串里则返回0

      select instr('杨不悔爱上了尹六侠','尹六侠') as out_put;   结果:7

    6.trim:去掉字符串前后指定字符,默认去掉空格

      select trim('     张 翠 翠            ');   结果:张 翠 翠

      select trim('a' FROM 'aaaaaa张 aaaa翠aa 翠aaaaaaaaaa');   结果:张 aaaa翠aa 翠

     7.lpad:用指定的字符实现左填充到指定长度

      select lpad('殷素素', 10, '*');     结果:*******殷素素

      select lpad('殷素素', 2, '*');     结果:殷素

    8.rpad: 用指定的字符实现右填充到指定长度

      select rpad('殷素素', 10, '*');     结果:殷素素*******

    9.replace:替换

      select replace('张无忌爱上了周芷若', '周芷若', '赵敏');  结果:张无忌爱上了赵敏

    二、数学函数    

    1.round :四舍五入

      select round(-1.55);   结果:-2

      select round(1.56775, 2);   结果:1.57   # 结果保留2位

    2.ceil : 向上取整,返回>=该参数的最小整数

      select ceil(5.6);  结果:6

      select ceil(-1.09);  结果:-1

    3.floor :向下取整,返回<= 该参数的最大整数

      select floor(-9.99);  结果:-10

      select floor(5.66);    结果:5

    4.truncate :截断(小数点后保留1位)

      select truncate(1.69999);   结果:1.6

    5.mod : 取余

      select mod(10, -3);    结果:1    # mod(a,b)   :    a-a/b*b   (被除数为负,则结果为负) 

    6.rand:获取随机数,返回0-1之间的小数

      select rand();   结果:0.8565648699706093

    三、日期函数

    1.now:返回当前系统日期+时间

      select now();   结果:2019-05-25 08:40:40

    2.curdate: 返回当前系统日期,不包含时间

      select curdate();   结果:2019-05-25

    3.curtime:返回当前系统时间,不包含日期

      select curtime();   结果:08:42:43

    4.获取指定的部分:年(year)、月(month)、月名(monthname)、日(day)、小时(hour)、分钟(minute)、秒(second)

      select year(now()) as 年;   结果:2019

      select year('1998-09-05') as 年;    结果:1998

      select monthname(now()) as 月名;    结果:  May

    %Y 四位的年份
    %y 两位的年份
    %m 月份(01,02....12)
    %c 月份(1,2.....12)
    %d 日(01,02.....)
    %H 小时(24小时制)
    %h 小时(12小时制)
    %i 分钟(00,01....59)
    %s 秒(00,01.....59)

    5.str_to_date:将日期格式的字符转换为指定格式的日期(1998-09-05)

      select str_to_date('1998-9-5','%Y-%c-%d');   结果:1998-09-05   #格式一一对应

      select str_to_date('9-5 1998','%c-%d %Y') as out_put;   结果:1998-09-05

    6.date_format:将日期转换为字符

      select date_format(now(),'%m月%d日 %y年');   结果:05月25日 19年

    四、其他函数

    1.version: 查看当前版本号

      select version();

    2.database:查看当前数据库

      select database();

    3.user:查看当前用户  

      select user();

    4.password('字符'):返回字符的密码形式

      select password('字符');      # 靠后的数据库版本已弃用

    5.md5('字符') : 返回字符的MD5的加密形式

      select md5('字符');   结果:9c07532d0c9acfecfc4ec2eb265c3e03

    五、流程控制函数

     1.if函数

      select if(10>5,'大','小');    结果:大     # 第一个参数为条件,若成立(ture),则返回第二个参数,若不成立(false),则返回第三个参数。

    2.case函数(使用一):

    语法:   case 要判断的字段或表达式

        when 常量1 then 要显示的值1或语句1;    # 显示值(搭配select使用):后面没有;,显示语句(存储过程里使用):后面有;

        when 常量2 then 要显示的值2或语句2;

        .....

        else 要显示的值n 或语句n;      # else 代表默认的情况

        end

    例:查询员工的工资,要求:部门号=30,显示工资为1.1倍,部门号=40,显示工资为1.2倍,其他部门,显示原工资

      select

          salary as 原始工资, department_id,

      case department_id

      when 30 then salary*1.1     # 注意这里是没有;的

      when 40 then salary*1.2

      else salary

      end as 新工资

      from employees;

    3.case函数(使用二):

    语法:

      case 

      when 条件1 then 要显示的值1或语句1;

      when 条件2 then 要显示的值2或语句2;

      ....

      else 要显示的值n 或语句n;

      end

    例:查询员工工资情况,若工资>13000,显示A级别,若工资>8000,显示B级别 

      select salary,

      case

      when salary>13000 then 'A'

      when salary>8000 then 'B'

      else 'C'

      end as 工资级别

      from employees;

    分组函数

    一、简单使用

    1.sum:求和

      select sum(salary) from employees;    结果:691400.00

    2.avg : 平均值

      select avg(salary) from employees;   结果:6461.682243

    3.max : 最大值

      select max(salary) from employees;    结果:24000.00

    4.min : 最小值

      select min(salary) from employees;  结果:2100.00

    5.count : 计算个数

      select count(salary) from employees;  结果:107

    二、函数参数支持哪些类型

    1.sum、avg 用于处理数值型

    2.max、min、count 可以处理任何类型

    3.以上的分组函数都忽略null值(注:count本身为计算非空(!null)值的个数)

    三、和distinct搭配

    都可以和distinct搭配使用,distinct(去重)

      select sum(distinct salary) from employees;   # 表示salary去重后求和

    四、count函数详细介绍

      select count(*) from employees;    # * 表示统计所有的行数(只要一行中有一个不为空,则本行数被记上)

      select count('xx') from employees;  # 表示在表中加入了一列的‘xx’数值,然后count再进行统计‘xx’的个数,来达到统计所有行的目的

    (一般使用count(*)来统计行数)

    五、datediff : 计算两个日期相差的天数

      select datediff('2019-5-25','2017-3-7');   结果:809

    注:和分组函数一同查询的字段要求是group by后的字段(因为分组函数最后计算出来只有一行,若和其他的函数一起使用(例:单行函数),则列表结果可能呈现不规则,这在sql中是没有意义的)

  • 相关阅读:
    一小时学会前端工程化
    lodash学习资料
    关于《冬天时我喜欢靠近温暖的事》这首歌 (民谣在路上)
    往后余生(简单的歌词分享)
    如果觉得活的很累不妨进来看看(生活应该简简单单)
    《大学》全文及白话翻译
    原型设计模式 Prototype
    解释器模式 Interpreter
    copy on write,代理模式
    ado.net
  • 原文地址:https://www.cnblogs.com/Vera-y/p/10921256.html
Copyright © 2011-2022 走看看