zoukankan      html  css  js  c++  java
  • 常见函数之单行函数

    #进阶4:常见函数
    
    /*
    概念:类似于java中的方法,将一组逻辑语句封装子方法体中,对外暴露名
    好处:1.隐藏了实现细节 2.提高代码的重用性
    调用:
                selcet 函数名(实参列表) 【from 表】;
    特点:
            ①叫什么(函数名)
            ②干什么(函数功能)
    分类:
            1.单行函数
            如 concat 、length、ifnull等
            ·字符函数数学函数
            ·日期函数
            ·其他函数【补充】
            流程控制函数【补充】
            2.分组函数
            功能:做统计使用,由称为统计函数、聚合函数、组函数
    常见函数:
    字符函数:length concat substr instr trim upper lower lpad rpad replace
    数学函数:round ceil floor truncate mod 
    日期函数: now curdate curtime year month monthname day hour minute second str_to_date date_format
    其他函数:version database USER
    控制函数:if case
    */
    
    #一、字符函数
    
    #LENGTH()
    SELECT LENGTH('john');
    SELECT LENGTH('张三丰hahaha');
    
    SHOW VARIABLES LIKE '%char%'
    
    #2.CONCAT(str1,str2,...) 拼接字符串
    SELECT CONCAT(last_name,'_',first_name)
    FROM employees;
    
    #3.upperlower
    SELECT UPPER('john');
    SELECT LOWER('john');
    #实例:将姓变大写,名变小写,然后拼接
    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(first_name)) out_name
    FROM employees;
    
    #5.instr
    SELECT INSTR('杨不悔爱上了殷六侠客','') as out_put;
    
    #6.TRIM()
    
    SELECT LENGTH(TRIM('    张翠山    ')) as out_put;
    
    SELECT TRIM('a' FROM 'aaaaaaaaaa张aaa翠山aaaaaaaaaaaaaaaaaaa') as out_put;
    
    #7.LPAD()用指定的字符实现左填充指定长度
    SELECT lpad('殷素素',10,'*') out_put;
    
    #8。replace全部替换
    SELECT REPLACE('周芷若12334','周芷若','赵敏');
    
    
    #二、数学函数
    #round 四舍五入
    SELECT ROUND(1.45);
    SELECT ROUND(1.567,2);
    
    #CALL 向上取整,返回>=该参数的最大整数
    SELECT CEIL(1.52);
    
    #floor 向下取整,返回<=该参数的最大整数
    SELECT FLOOR(-9.99);
    
    #`TRUNCATE 截断
    SELECT truncate(1.699999,2);
    
    #mod取余
    /*
    mod(a,b) :a-a/b*b
    
    mod(-10,-3) :-10-(-10)/(-3)*(-3)=-1
    */
    SELECT MOD(10,-3);
    SELECT 10%3;
    
    #三、日期函数
    #now 返回当前系统日期+时间
    SELECT now();
    
    #CURDATE()返回当前系统日期,不包含时间
    SELECT CURDATE();
    
    #CURTIME()返回当前时间,不包含日期
    SELECT CURTIME();
    
    #可以活得指定的部分,年year、月month、日day、小时hour、分钟minute、秒second
    SELECT year(now()) 年;
    SELECT year('1998-1-1') 年;
    SELECT month('1998-1-1') 月;
    
    SELECT year(hiredate) 年 FROM employees;
    
    SELECT month(NOW())  月;
    SELECT MONTHNAME(NOW()) 月;
    SELECT minute(NOW()) 分钟;
    
    #str_to_date 将字符通过指定的格式转换成成日期
    
    SELECT STR_TO_DATE('1999-1-2','%Y-%m-%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','%m-%d-%Y');
    
    #data_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,'没奖金,呵呵','有奖金,嘻嘻') as 奖金
    FROM employees
    ORDER BY commission_pct DESC;
    
    #2.case函数的使用一:switch case的效果
    /*
    switch(变量或表达式){
    case 常量1:语句1; break;
    。。。
    default:语句n;break;
    }
    myq1中
    case要判断的字段或表达式
    when常量1 then要显示的值1或语句1;
    when常量2 then要显示的值2或语句2; 
    ...
    e1se要显示的值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;
    
    #3.case函数的使用二:类似于 多重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
    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;
    
    #------------------------------
    #练习:
    #显示系统时间(注:日期+时间)
    SELECT now() as 系统时间;
    #查询员工号、姓名、工资,以及工资提高百分之20%后的结果(new salary)
    SELECT  employee_id,last_name,salary,salary*1.2 as "new salary"
    from employees;
    #3.将员工的姓名按首字母排序,并写出姓名的长度(length)
    SELECT LENGTH(last_name) 长度,substr(last_name,1,1) 首字符,last_name
    FROM employees
    ORDER BY 首字符 ;
    #
  • 相关阅读:
    损失函数VS评估指标
    协程到底是什么?看完这个故事明明白白!
    一个故事看懂AI神经网络工作原理
    一个爬虫的故事:这是人干的事儿?
    深夜,我偷听到程序员要对session下手……
    突然挂了!Redis缓存都在内存中,这下完了!
    还不懂Redis?看完这个故事就明白了!
    可怕!公司部署了一个东西,悄悄盯着你!
    小白怎么入门网络安全?看这篇就够啦!
    CPU有个禁区,内核权限也无法进入!
  • 原文地址:https://www.cnblogs.com/deyo/p/13235110.html
Copyright © 2011-2022 走看看