zoukankan      html  css  js  c++  java
  • MySQL_DQL_函数

    函数

    • 常见函数
    /*
    函数:类似于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;
    
    
  • 相关阅读:
    [译]ASP.NET Core 2.0 依赖注入
    FineUIPro v4.0.0 发布了,全新 CSS3 动画惊艳登场!
    [译]ASP.NET Core 2.0 带初始参数的中间件
    [译]ASP.NET Core 2.0 中间件
    【原创】三招搞死你的IE11,可重现代码下载(IE Crash keyframes iframe)!
    立足中国,走向世界(Made in China, Go to World)
    【JS小技巧】JavaScript 函数用作对象的隐藏问题(F.ui.name)
    FineUIMvc v1.4.0 发布了(ASP.NET MVC控件库)!
    公安系统信息化业务概要系统设计
    2018年软件开发状态报告
  • 原文地址:https://www.cnblogs.com/csyh/p/12390639.html
Copyright © 2011-2022 走看看