zoukankan      html  css  js  c++  java
  • MySQL基础006 --- 常见函数介绍

    常见函数介绍

    功能:类似于java中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名
    好处
    1、隐藏了实现细节
    2、提高代码的重用性
    调用
    select 函数名(实参列表)【 from 表】;
    特点
    ①函数名
    ②函数功能
    分类
    1、单行函数
    如:CONCAT、LENGTH、IFNULL等
    字符函数、数学函数、日期函数、其它函数、流程控制函数
    2、分组函数
    功能:做统计使用,又称为统计函数、聚合函数、组函数

    函数总结

    字符函数 数学函数 日期函数 其它函数 流程控制函数
    LENGTH ROUND NOW VERSION IF
    CONCAT CEIL CURDATE DATABASE CASE
    UPPER FLOOR CURTIME USER
    LOWER TRUNCATE YEAR MONTH DAY
    SUBSTR SUBSTRING MOD HOUR MINUTE SECOND
    INSTR STR_TO_DATE
    TRIM DATE_FORMAT
    LPAD RPAD
    REPLACE

    一、字符函数

    1.LENGTH

    SELECT LENGTH('Fenix');
    SELECT LENGTH('高飞'); # UTF-8 一个汉字占3个字节
    
    SHOW VARIABLES LIKE '%char%';
    

    2.CONCAT

    SELECT CONCAT(last_name,'___',first_name) AS 姓名
    FROM     employees;
    

    3.UPPER,LOWER

    SELECT UPPER('john');
    SELECT LOWER('FENIX');
    

    案例1: 将姓变大写,名变小写,然后拼接

    SELECT 
    CONCAT(UPPER(first_name),'___',LOWER(last_name)) AS 姓名
    FROM 
    employees;
    
    

    4. SUBSTR、SUBSTRING

    # 截取从指定索引处后面的所有字符
    # 输出789
    SELECT SUBSTR('123456789',7) AS out_put; # 索引从1开始
    # 截取从指定索引处指定字符长度的字符
    # 输出345
    SELECT SUBSTR('123456789',3,3) AS out_put; 
    

    案例2:姓名中首字符大写,其他字符小写,然后用_拼接,显示出来

    SELECT
    CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2))) 
    FROM
    employees;
    

    5.INSTR

    # 用于返回子串在起始串中第一次出现的索引,如果找不到返回0
    SELECT
    INSTR(123456789,567);
    
    SELECT
    INSTR(123456789,457);
    

    6.TRIM

    #去掉前后空格
    SELECT TRIM('  12345  ');
    SELECT LENGTH('  12345  '); #length = 9
    SELECT LENGTH(TRIM('  12345  ')); #length = 5
    
    SELECT TRIM('aa' FROM 'aaaaaa12aa3aa45aaa'); # 在前后两端中去除子串
    

    7.LPAD

    SELECT LPAD('12345',10,'*') AS  out_put; #*****12345
    
    SELECT LPAD('12345',3,'-') AS out_put ; # 123
    

    8.RPAD

    #用指定的字符实现右填充指定长度
    
    SELECT RPAD(12345,10,'aa')AS out_put; #12345aaaaa
    
    SELECT RPAD(12345,3,'--') AS OUT_PUT; #123
    

    9.REPLACE

    SELECT REPLACE('张无忌爱上了周芷若1,张无忌爱上了周芷若2','周芷若','赵敏') AS out_put;
    

    字符函数总结:


    二、数学函数

    1.ROUND 四舍五入

    SELECT ROUND(1.65) #2
    SELECT ROUND(-1.3) #1
    SELECT ROUND(1.5678,2) # 1.57  # 保留2位
    

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

    SELECT CEIL(0.001) ;# 1
    SELECT CEIL(1.00); # 1
    

    3.FLOOR 向下取整,返回<=该参数的最小整数

    SELECT FLOOR(-9.99); # -10
    SELECT FLOOR(9.99) ;# 9
    

    4.TRUNCATE 截断

    SELECT TRUNCATE(1.666666,3) # 1.666
    

    5.MOD 取余

    SELECT MOD(10,3); #1
    
    SELECT 10%3;#1
    

    三、日期函数

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

    SELECT NOW();
    

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

    SELECT CURDATE();
    

    3.CURTIME 返回当前时间,不包含日期

    SELECT CURTIME();
    

    4.可以获取指定的部分,年、月、日、小时、分钟、秒

    SELECT YEAR(NOW()) AS 年; #2020
    SELECT YEAR('1996-09-09') AS 出生年; #1996
    SELECT SECOND(NOW()) AS 秒; #1~60
    
    SELECT MONTH('1996-09-09'); #9
    SELECT MONTHNAME(NOW());    #获取当前月份对应的英文---June
    

    5.STR_TO_DATE 将日期格式的字符转换成指定格式的日期

    SELECT STR_TO_DATE('1996-9-9','%Y-%c-%d') AS out_put;
    

    案例1:查询入职日期为1992--4-3的员工信息

    # 非格式化
    SELECT * 
    FROM employees
    WHERE hiredate = '1992-4-3';
    
    # 格式化
    SELECT * 
    FROM employees
    WHERE hiredate = STR_TO_DATE('4-3 1992','%c-%d %Y');
    
    6. date_format 将日期转换成字符
    SELECT DATE_FORMAT(NOW(),'%y年%m月%d日') AS out_put;
    

    案例2:查询有奖金的员工名和入职日期(xx月/xx日 xx年)

    SELECT last_name,DATE_FORMAT(hiredate,'%m月/%d日 %y年') AS 入职日期
    FROM employees
    WHERE commission_pct IS NOT NULL;
    


    四、其它函数

    1.查看MySQL当前版本号

    SELECT VERSION();
    

    2.查看当前数据库

    SELECT DATABASE();
    

    3.查看当前用户

    SELECT USER();
    

    五、流程控制函数

    1. if函数: if else 的效果(类似三元运算符)

    SELECT IF(10>5,'大','小') AS out_put;
    

    案例1:查询员工有无奖金并按‘有奖金’和‘没奖金’的奖金情况输出

    SELECT last_name, commission_pct , 
    IF(commission_pct IS NULL,'没奖金','有奖金') AS 奖金情况
    FROM employees;
    

    2.case函数

    使用一: switch case的效果
    Java:
    (擅长处理等值判断)
    switch(变量或表达式){
    case 常量1: 语句1; break;
    ...
    default:语句n;break;
    }

    MySQL:

    case 要判断的字段或表达式
    when 常量1 then 要显示的值1或语句1
    when 常量2 then 要显示的值2或语句2
    ···
    else 要显示的值n或语句n;
    end

    案例1:按以下要求查询员工的工资:

    /*
    部门号=30,显示的工资为1.1倍
    部门号=40,显示的工资为1.2倍
    部门号=50,显示的工资为1.3倍
    其他部门,显示的工资为原始工资
    
    */
    
    # 注意 select 语句和case语句之间要加','  否则会报1064的语法错误
    
    SELECT department_id AS 部门号, salary AS 原始工资,
    CASE `department_id`
    WHEN 30 THEN salary * 1.1
    WHEN 40 THEN salary * 1.2
    WHEN 50 THEN salary * 1.3
    ELSE salary
    END AS 新工资
    FROM employees;
    
    

    使用二:类似于多重if
    Java:
    (区间判断)
    if(条件1){
    语句1;
    }
    else if(条件2){
    语句2;
    }
    ···
    else{
    语句n;
    }

    MySQL:

    case
    when 条件1 then 要显示的值1或语句1
    when 条件2 then 要显示的值2或语句2
    ···
    else 要显示的值n或语句n

    案例2:查询员工的工资情况

    /*
    如果工资>20000,显示A级别
    如果工资>15000,显示B级别
    如果工资>10000,显示C级别
    否则,显示D级别
    */
    
    SELECT salary,
    CASE 
    WHEN salary > 20000 THEN 'A'
    WHEN salary > 15000 THEN 'B'
    WHEN salary > 10000 THEN 'C'
    ELSE 'D'
    END AS 工资级别
    FROM employees;
    

    练习题

    SELECT CONCAT(last_name,' earns ',salary,' monthly but wants ',salary*3) AS OUT_PUT
    FROM employees
    WHERE last_name LIKE 'K%' AND salary = 24000;
    

    SELECT last_name, job_id AS job,
    CASE job_id
    WHEN 'AD_PRES' THEN 'A'
    WHEN 'ST_MAN'  THEN  'B'
    WHEN 'IT_PROG' THEN 'C'
    WHEN 'SA-REP' THEN 'D'
    WHEN 'ST-CLERK' THEN 'E'
    END AS grade
    FROM employees
    WHERE job_id = 'AD_PRES';
    
  • 相关阅读:
    Linux文件系统
    Ant整合svnant(三)
    Linux文件系统基本结构和基本操作管理
    Ant生成javadoc(四)
    Linux系统常用命令
    Linux系统目录架构
    使用fdisk进行磁盘管理
    命令行BASH的基本操作
    python 获取项目的根路径
    游戏自动化测试思路
  • 原文地址:https://www.cnblogs.com/fenixG/p/13024439.html
Copyright © 2011-2022 走看看