您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

MySQL笔记-函数

bubuko 2022/1/25 20:09:03 mysql 字数 4223 阅读 831 来源 http://www.bubuko.com/infolist-5-1.html

函数 常见函数 分组函数 ...

函数

  • 常见函数
/*
函数:类似于java中的方法
为了解决某个问题,将编写一系列的命令集合封装在一起,对外仅暴露方法名,供外部调用
1、自定义函数
2、调用函数:需要知道函数名以及函数功能
常见函数:
    字符函数:
        concat:拼接字符
        substr:截取子串
        length:获取字节长度
        char_length:获取字符长度
        upper:字符转换为大写
        lower:字符转换为小写
        trim:去除前后指定字符
        left:从左开始截取子串
        right:从右开始截取子串
        lpad:左填充
        rpad:右填充
        instr:获取字符串第一次出现的索引
        strcmp:比较两个字符串大小
    数字函数;
        abs:获取绝对值
        ceil:向上取整
        floor:向下取整
        round:四舍五入
        truncate:截断
        mod:取余
    日期函数:
        now:当前日期和时间
        curdate:当前日期
        curtim:当前时间
        datediff:时间差
        date_format:指定日期时间格式
        str_to_date:按指定格式解析为日期时间类型
    流程控制函数:
        if:如果
        case:类似java的switch  
*/
#一、字符函数
1、CONCAT 拼接字符
SELECT CONCAT(last_name,'我是拼接进来的',first_name)
FROM employees;

2、LENGTH 获取字节长度
SELECT LENGTH('abcd中国');-- 10

3、CHAR_LENGTH 获取字符个数
SELECT CHAR_LENGTH('abcd中国');-- 6

4、SUBSTRING 截取子串
/*
注意:起始索引从1开始!!!
substr(str,起始索引,截取的字符长度)
substr(str,起始索引)
*/
SELECT SUBSTR('如果我是dj你还爱我吗',9,1);-- 爱

5、INSTR获取字符第一次出现的索引
SELECT INSTR('如果我是dj你还爱我吗','爱');-- 9

6、TRIM去前后指定的字符,默认是去空格
SELECT TRIM('  如果我是dj  你还爱我吗  ');
SELECT TRIM('x' FROM 'xx如果x我是dj你还爱我吗xx');-- 如果x我是dj你还爱我吗

7、LPAD/RPAD  左填充/右填充(按指定的长度显示字符)
SELECT LPAD('独孤九剑',10,'a');-- aaaaaa独孤九剑
SELECT RPAD('独孤九剑',1,'a');-- 独

8 、 UPPER/ LOWER转换大小写 -- 案例:查询员工表的姓名,要求格式:姓首字符大写,其他字符小写,名所有字符大写,且姓和名之间用_分割,最后起别名“OUTPUT”
SELECT 
  CONCAT(
    UPPER(SUBSTR(first_name, 1, 1)),
    LOWER(SUBSTR(first_name, 2)),'_',UPPER(last_name)
  ) AS "OUTPUT" 
FROM
  employees ;

9、STRCMP 比较两个字符大小(前面的比后面的大返回1,小返回-1)
SELECT STRCMP('aa','bb');-- -1

10、LEFT/RIGHT  截取子串,从左/右开始
SELECT LEFT('鸠摩智',1);
SELECT RIGHT('鸠摩智',1);

#二、数学函数
1、ABS 绝对值
SELECT ABS(-34.6);

2、CEIL 向上取整  返回>=该参数的最小整数
SELECT CEIL(-1.09); -- 1

3、FLOOR 向下取整,返回<=该参数的最大整数
SELECT FLOOR(-1.09); -- -2

4、ROUND 四舍五入
SELECT ROUND(1.8712345,1);-- 1.9

5、TRUNCATE 截断
SELECT TRUNCATE(1.8712345,1);-- 1.8

6、MOD 取余
SELECT MOD(-10,3);
取余公式:a%b = a-(INT)a/b*b
小技巧:被取余数是正数/负数结果也是

#三、日期函数
1、NOW -- 当前日期和时间
SELECT NOW();

2、CURDATE -- 当前日期
SELECT CURDATE();

3、CURTIME -- 当前时间
SELECT CURTIME();

4、DATEDIFF -- 计算时间差(日期错误时结果为null)
SELECT DATEDIFF('2020-03-30','2020-02-29');-- 30

5、DATE_FORMAT -- 指定日期时间格式
SELECT DATE_FORMAT('1998-01-02 15-20-10','%Y年%m月%d日 %H时%i分%s秒');-- 1998年01月02日 15时20分10秒

6、STR_TO_DATE -- 按指定格式解析字符串为日期时间类型
SELECT STR_TO_DATE('3/15 1998 10:20:20','%m/%d %Y %H:%i:%s');-- 1998-03-15 10:20:20

#四、流程控制函数
1、IF函数 -- 类似三元运算符
SELECT IF(100>9,'好','坏');
-- 案例:需求:如果有奖金,则显示最终奖金,如果没有,则显示0
SELECT IF(commission_pct IS NULL,0,12*salary*commission_pct)
FROM employees;

2、CASE函数
-- 情况1:类似于switch语句,可以实现等值判断
CASE 表达式
WHEN 值1 THEN 结果1
WHEN 值2 THEN 结果2
...
ELSE 结果n
END

-- 情况2:类似于多重IF语句,实现区间判断
CASE 
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
...
ELSE 结果n
END
  • 分组函数
/*
说明:分组函数往往用于实现将一组数据进行统计计算,最终得到一个值,又称为聚合函数或统计函数

分组函数清单:
    sum(字段名):求和
    avg(字段名):求平均值
    max(字段名):求最大值
    min(字段名):求最小值、
    count(字段名):计算非空字段值的个数
*/
#案例1 :查询员工信息表中,所有员工的工资和、工资平均值、最低工资、最高工资、有工资的个数
SELECT SUM(salary),AVG(salary),MIN(salary),MAX(salary),COUNT(salary) FROM employees;

#案例2:添加筛选条件
    -- ①查询emp表中记录数:
    SELECT COUNT(employee_id) FROM employees;

    -- ②查询emp表中有佣金的人数:
    SELECT COUNT(salary) FROM employees;
    
    -- ③查询emp表中月薪大于2500的人数:
    SELECT COUNT(salary) FROM employees WHERE salary>2500;

    #④查询有领导的人数:
    SELECT COUNT(manager_id) FROM employees;
#count的补充介绍★
-- 1、统计结果集的行数,推荐使用count(*)
-- -- 方式一:检测每一行的每一列,只要有不为null的值,则返回该行
    SELECT COUNT(*) FROM employees;
    SELECT COUNT(*) FROM employees WHERE department_id = 30;

-- -- 方式二:在每一不为空的行前面加一列,并指定值用来判断非空(效率低)
    SELECT COUNT(1) FROM employees;
    SELECT COUNT(1) FROM employees WHERE department_id = 30;

-- 2、搭配distinct实现去重的统计
-- -- 需求:查询有员工的部门个数
    SELECT COUNT(DISTINCT department_id) FROM employees;

MySQL笔记-函数

原文:https://www.cnblogs.com/csyh/p/12390639.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶