zoukankan      html  css  js  c++  java
  • MySql 基础 常见函数

    概念:类似于java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名
    好处:1、隐藏了实现细节 2、提高代码的重用性
    调用:select 函数名(实参列表) 【from 表】;
    特点:
    ①叫什么(函数名)
    ②干什么(函数功能)

    分类:
    1、单行函数
    如 concat、length、ifnull等
    2、分组函数

    功能:做统计使用,又称为统计函数、聚合函数、组函数

    常见函数:
    一、单行函数
    字符函数:

    length:获取字节个数(utf-8一个汉字代表3个字节,gbk为2个字节)
    concat
    substr
    instr
    trim
    upper
    lower
    lpad
    rpad
    replace
    View Code

    数学函数:

    round
    ceil
    floor
    truncate
    mod
    View Code

    日期函数:

    now
    curdate
    curtime
    year
    month
    monthname
    day
    hour
    minute
    second
    str_to_date
    date_format
    View Code

    其他函数:

    version
    database
    user
    View Cod

    控制函数

    if
    case
    View Code

    #一、字符函数

    #1.length 获取参数值的字节个数

    SELECT LENGTH('john');  
      结果4
    SELECT LENGTH('张三丰hahaha');    
    结果 15  汉字代表3个字节(utf8,)
    备注 gbk中汉字代表2个字节
    SHOW VARIABLES LIKE '%char%'
    View Code

    #2.concat 拼接字符串

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

    #3.upper、lower

    #示例:将姓变大写,名变小写,然后拼接

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

    #4.substr、substring

    注意:索引从1开始
    #截取从指定索引处后面所有字符

    SELECT SUBSTR('李莫愁爱上了陆展元',7)  out_put;
    结果 陆展元

    #截取从指定索引处指定字符长度的字符

    SELECT SUBSTR('李莫愁爱上了陆展元',1,3) out_put;

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

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

    #5.instr 返回子串第一次出现的索引,如果找不到返回0

    SELECT INSTR('杨不殷六侠悔爱上了殷六侠','殷八侠') AS out_put;

    #6.trim  去掉左右的空格

    SELECT LENGTH(TRIM('    张翠山    ')) AS out_put;
    SELECT TRIM('a' FROM 'aaaaaaaaa张aaaaaaaaaaaa翠山aaaaaaaaaaaa')  AS out_put;

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

    SELECT LPAD('殷素素',2,'*') AS out_put;

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

    SELECT RPAD('殷素素',12,'ab') AS out_put;

    #9.replace 替换

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

    #二、数学函数

    #round 四舍五入

    SELECT ROUND(-1.55);
    SELECT ROUND(1.567,2);
    View Code

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

    SELECT CEIL(-1.02);

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

    SELECT FLOOR(-9.99);

    #truncate 截断

    SELECT TRUNCATE(1.69999,1);

    #mod取余

    SELECT MOD(10,-3);
    SELECT 10%3;

    #三、日期函数

    #now 返回当前系统日期+时间

    SELECT NOW();

    #curdate 返回当前系统日期,不包含时间

    SELECT CURDATE();

    #curtime 返回当前时间,不包含日期

    SELECT CURTIME();

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

    SELECT YEAR(NOW()) 年;
    SELECT YEAR('1998-1-1') 年;
    
    SELECT  YEAR(hiredate) 年 FROM employees;
    
    SELECT MONTH(NOW()) 月;
    SELECT MONTHNAME(NOW()) 月;
    View Code

    #str_to_date 将字符通过指定的格式转换成日期

    SELECT STR_TO_DATE('1998-3-2','%Y-%c-%d') AS out_put;

    #查询入职日期为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');

    #date_format 将日期转换成字符

    SELECT DATE_FORMAT(NOW(),'%y年%m月%d日') AS out_put;

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

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

    #四、其他函数

    SELECT VERSION();  查看版本
    SELECT DATABASE(); 查看当前库
    SELECT USER();查看当前用户

    #五、流程控制函数

    #1.if函数: if else 的效果

    SELECT IF(10<5,'','');
    
    SELECT last_name,commission_pct,IF(commission_pct IS NULL,'没奖金,呵呵','有奖金,嘻嘻') 备注
    FROM employees;

    #2.case函数的使用一: 

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

    ————————————————————————————————————

    /*案例:查询员工的工资,要求

    部门号=30,显示的工资为1.1倍
    部门号=40,显示的工资为1.2倍
    部门号=50,显示的工资为1.3倍
    其他部门,显示的工资为原工资

    SELECT salary 原始工资,department_id,
    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;
    View Code

    #3.case 函数的使用二:类似于 多重if

    case
    when 条件1 then 要显示的值1或语句1
    when 条件2 then 要显示的值2或语句2
    。。。
    else 要显示的值n或语句n
    end
    */

    __________________________________________________

    #案例:查询员工的工资的情况
    如果工资>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;
    View Code
  • 相关阅读:
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 133 克隆图
  • 原文地址:https://www.cnblogs.com/sunjinchao/p/14037698.html
Copyright © 2011-2022 走看看