MySQL 进阶4 SQL常见函数

# 进阶4 SQL常见函数

分类:
    1/单行函数: 
    字符函数:
        concat(),length(),ifnull(__,default) ,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
    其他函数:
        
2/多行函数: 做统计用
/*
  概念:类似于java的方法,将一组逻辑语句封装在方法体中,对外仅暴露方法名
  好处:1/隐藏了实现的细节
    2.提高了代码的重用性
  调用: select 函数名(实参列表) [from 表];
  分类:
    1/单行函数: concat(),length(),ifnull(__,default)
    2/多行函数: 做统计用
      
*/
#单行函数: 
#1.字符函数
 #length
 SELECT LENGTH('六六');  #结果: 6
 SELECT LENGTH('123');    #结果: 3
 #显示字符集    
 SHOW VARIABLES LIKE '%char%'     ;
 
#2.concat()

#3.upper()/lower()  大写函数/小写函数
SELECT UPPER('asdd');
    #实例:将姓变为大写,名变为小写,然后拼接
SELECT CONCAT(UPPER(last_name),'  ', LOWER(first_name)) 姓名
FROM employees;

#4 .substr(str,pos, len) / 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(s1,s2 ) 返回子串s2在母串中出现的第一次索引(从1开始),找不到返回0
SELECT INSTR('从前的那个从其那','从前') out_put;

#6. trim   #python的用法一致
SELECT TRIM('     张三  ') AS out_put;
SELECT TRIM('a' FROM 'aaaaa张aaaaaaa三aaaaaaaaaaaaaaaa') AS out_put;

#7.lpad   用指定字符实现左填充直指定长度
SELECT LPAD('殷素素',10,'*') AS out_put;  #*******殷素素
SELECT LPAD('殷素素',2,'*') AS out_put;    #殷素

#8.rpad   用指定字符实现右填充直指定长度
SELECT RPAD('殷素素',10,'*') AS out_put;  #殷素素*******
SELECT RPAD('殷素素',2,'*') AS out_put;    #殷素

#9.replace 全部替换
SELECT REPLACE('张无忌爱上了周芷若','周芷若','赵敏') AS put;   #张无忌爱上了赵敏


########数学函数  (第二个参数表示保留小数点后位数)

#1.round 四舍五入 ,第二个参数表示保留小数点后位数
SELECT ROUND(1.65);  #2
SELECT ROUND(1.35);  #1
SELECT ROUND(1.567,2);  #1.57

#2.ceil 绝对向上取整 ,返回>=该参数的最小整数
SELECT CEIL(1.0);    #1
SELECT CEIL(1.0001); #2
SELECT CEIL(-1.02);  #1

#3.floor 向下取整,返回<=该参数的最大整数
SELECT FLOOR(-9.99);  #-10
SELECT FLOOR(9.99);   #9

#4.truncate 截断取整
SELECT TRUNCATE(1.699999,1) ;  #1.6

#5.mod取余
/*
mod(a,b) : a-a/b*b即为取余结果
*/
SELECT MOD(-10,-3);  #-1

#三.日期函数:
#1.now  返回系统当前日期+时间
SELECT NOW();   #2018-10-23 17:18:08

#2.curdate   #返回当前的日期
SELECT CURDATE();  #2018-10-23

#3.curtime   返回当前的时分秒
SELECT CURTIME();  #17:17:47

#4.可以获取指定的时间部分: 年(YEAR)/月(MONTH)/日(day)/小时(hour)/分钟(minute)/秒(second)
SELECT YEAR(NOW());         #2018
SELECT YEAR('2008-10-10');  #2008

#5.str_to_date : 将字符串转换成标准格式的日期
        #标准匹配符: 年(%Y.%y)/月(%m)/日(%d)/小时(%H.%h)/分钟(%i)/秒(%s)
SELECT STR_TO_DATE('9-13-1999','%c-%d-%Y');  #1999-09-13

#6.DATE_format :将日期转换成标准格式的字符串
SELECT DATE_FORMAT('2018/6/6','%Y年%m月%d日');  #2018年06月06日

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

     #案例:查询有奖金的员工名和入职时间(xx月/xx日 xx年)
SELECT CONCAT(last_name," ",first_name),DATE_FORMAT(hiredate,'%m月/%d日 %Y年')
FROM employees
WHERE commission_pct IS NOT NULL;

#四 .其他函数
SELECT VERSION();   #8.0.12
SELECT DATABASE();   #myemployees
SELECT USER();    #root@localhost

#五. 流程控制函数

#1.if函数 : if else 的效果
SELECT IF(10<5,'','');
SELECT last_name,commission_pct,IF(commission_pct IS NULL,'没奖金,呵呵','有奖金,嘻嘻') 备注
FROM employees;

#2.case 函数/结构 的使用1: switch case的效果
/*
   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 40 THEN salary*1.3
ELSE salary
END AS 新工资
FROM employees;

#2.case 函数/结构 的使用二: 类似于多重if 语句
/*
 mysql 中:
 { case  
   when 常量1 then 要显示的值1或语句1;
   when 常量2 then 要显示的值2或语句2;
   ...   
   else 要显示的值n或者语句n;
   end }
*/
 #举个栗子
   #工资>20000, 显示A等级
   #工资>15000, 显示A等级
   #工资>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;

猜你喜欢

转载自www.cnblogs.com/zhazhaacmer/p/9838492.html