-- 绝对值 100
select abs(-100)
-- 四舍五入 保留两位小数 4.6300
select round(4.6288*100)/100
-- 向下取整 9
select floor(9.9)
-- 向上取整 4
select CEIL(3.2)
-- 2的3次幂
SELECT power(2,3)
当前时间
now(), 2019-08-09 09:22:51
curdate(), 2019-08-09
curtime() 09:22:51
格式化日期
select DATE_FORMAT(now(),'%Y') 2019
DATE_FORMAT(now(),'%m') 08
DATE_FORMAT(now(),'%d') 09
DATE_FORMAT(now(),'%H') 09 小时(24)
DATE_FORMAT(now(),'%h') 09 小时(12)
DATE_FORMAT(now(),'%i') 47 分钟
DATE_FORMAT(now(),'%s') 20 秒
DATE_FORMAT(now(),'%w') 5 星期5
DATE_FORMAT(now(),'%W') Friday 星期5
DATE_FORMAT(now(),'%j') 本年第几天 221
DATE_FORMAT(now(),'%U') 本年第几周 31
DATE_FORMAT(now(),'%r') 时间(24) 09:48:01 AM
DATE_FORMAT(now(),'%T') 时间(12) 09:48:42
日期偏移计算
SELECT DATE_ADD(NOW(),INTERVAL 5 DAY) 2019-08-14 10:07:19 增加5天
SELECT DATE_ADD(NOW(),INTERVAL -5 DAY) 2019-08-04 10:08:24 减少5天
SELECT DATE_ADD(NOW(),INTERVAL -5 MINUTE) 减少5分钟
SELECT DATE_ADD(NOW(),INTERVAL -5 HOUR) 减少5小时
SELECT DATE_FORMAT(DATE_ADD(NOW(),INTERVAL -5 HOUR) ,"%Y/%m/%d") 2019/08/09
计算两个时间 相差天数
SELECT DATEDIFF('2019-7-9',NOw()) -31
字符函数
select LOWER('ERIC') eric 转小写
select upper('eric') ERIC 转大写
select LENGTH ('eric') 计算长度 4
select CONCAT('eric','love','beijing') 字符串拼接 ericlovebeijing
select INSERT('你好',1,0,'先生') 插入替换字符 先生你好
select INSTR('eric','r') 2 字符出现的位置 没有返回0
select REPLACE('你好先生','先生','女士') 你好女士 字符替换
字符串截取
select SUBSTR('你好世界',3,4) 世界
select SUBSTRING('你好世界',3,1) 世
select LPAD(SUBSTRING('13312345678',8,4),11,"*") *******5678
select RPAD(SUBSTRING('13312345678',1,7),11,"*") 1331234****
select REPLACE('13312345678',SUBSTRING('13312345678',4,4), '****') 133****5678
select RPAD(SUBSTRING('李晓娜',1,1),3,'*') 李**
select TRIM(' Hello World ') 去除两边空格
条件判断 表达式
select
e.ename,e.empno,d.dname,
if(d.dname = "SALES",'礼品A','礼品B')
from t_emp e
join t_dept d on d.deptno = e.deptno
SMITH 7369 RESEARCH 礼品B
ALLEN7499SALES礼品A
WARD7521SALES礼品A
JONES7566RESEARCH礼品B
MARTIN7654SALES礼品A
BLAKE7698SALES礼品A
/**
SALES 去p1
ACCOUNTING 去p2
RESEARCH 去p3
没部门的 去p4
*/
select
e.ename,e.empno,d.dname,
CASE
WHENd.dname = "SALES" THEN 'P1'
WHENd.dname = "ACCOUNTING" THEN 'P2'
WHENd.dname = "RESEARCH" THEN 'P3'
ELSE 'P4'
END as place
from t_emp e
left join t_dept d on d.deptno = e.deptno
ADAMS 7876 RESEARCH P3
FORD7902RESEARCHP3
ALLEN7499SALESP1
WARD7521SALESP1
MARTIN7654SALESP1
BLAKE7698SALESP1
TURNER7844SALESP1
JAMES7900SALESP1
李四6789P4
/**
SALES 超过20年 10%
SALES 不满20 5%
ACCOUNTING 300
RESEARCH 低于部门平均底薪 200
没有部门的员工,100元
*/
update t_emp e LEFT JOIN t_dept d on e.deptno = d.deptno
LEFT JOIN (select deptno, avg(sal) as avg from t_emp group by deptno) t on t.deptno = e.deptno
set e.sal = (
CASE
WHEN d.dname = 'SALES' AND DATEDIFF(NOW(),e.hiredate)/365 >= 20 THEN sal * 1.1
WHEN d.dname = 'SALES' AND DATEDIFF(NOW(),e.hiredate)/365 < 20 THEN sal * 1.05
WHEN d.dname = 'ACCOUNTING' THEN e.sal + 300
WHEN d.dname = 'RESEARCH' and e.sal < t.avg THEN e.sal + 200
WHEN e.deptno IS NULL THEN sal + 100
else e.sal
END
)