DQL——常见函数之单行函数

   概念:
             类似于java中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名
   
   好处:1、隐藏了实现细节    2、提高代码的重用性
   
   调用:
             select  函数名(实参列表)  【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_formate
           其他函数:version
                             datebase
                             user
           控制函数:if
                            case
          

单行函数

一、字符函数

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

SELECT LENGTH('jhon');
SELECT LENGTH('张三丰hahaha');

SHOW VARIABLES LIKE '%char%' #查询当前使用的字符集

2.concat  拼接字符串

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

3.upper 变大写、 lower 变小写

SELECT UPPER('john');

SELECT LOWER('joHn');

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

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

4.substr、substring 两个意思一样,属于简写

   注意:索引从1开始

截取从指定索引处后面的所有字符

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

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

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

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

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

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

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

6.trim 去掉前后指定字符

SELECT LENGTH(TRIM('    张翠山     ')) AS out_put;

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

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

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

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

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

9.replace 替换

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

二、数学函数

1.round  四舍五入

SELECT ROUND(-1.65);
SELECT ROUND(1.567,2);

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

SELECT CEIL(1.00002);

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

SELECT FLOOR(-9.99);

4.truncate  截断,小数点后保留几位

SELECT TRUNCATE(1.65,1);

5.mod  取余

SELECT MOD(10,3);

SELECT 10%3;

三、日期函数

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

SELECT NOW();

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

SELECT CURDATE();

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

SELECT CURTIME();

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

SELECT YEAR(NOW()) 年;
SELECT YEAR('1998-1-1') 年; 
SELECT YEAR(hiredate) 年 FROM employees;

SELECT MONTH(NOW()) 月;
SELECT MONTHNAME(NOW()) 月;

 4.str_to_date 将日期格式的字符转换成指定格式的日期

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

DQL——常见函数之单行函数

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

5.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函数的使用一:switch case的效果

java中
  switch(变量或表达式){
       case 常量1:语句一;break;
       ...
       default:语句n;break;
  }
 
mysql中
   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 ;

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 BETWEEN 15000 AND 20000 THEN 'B'
    WHEN salary BETWEEN 10000 AND 15000 THEN 'C'
    ELSE 'D' 
  END AS 级别 
FROM
  employees ;

 

上一篇:DQl


下一篇:MySQL-图形化用户界面