函数 函数名(参数)
1.
DATE_FORMAT(DATE,FORMAT):返回日期格式
NOW():返回当前日期年月日时分秒
CURDATE():返回当前年月日
CURTIME():返回当前的时分秒
2.
case ...when ...then
IFNULL(expr1,expr2):第一个为空则返回第二个
TIMESTAMPDIFF(可以为年月日,大日期,小日期):返回指定的日期相差的时间(可以为年月日)
DATEDIFF(expr1,expr2):返回俩个日期相差的天数(大的日期在前边)
DATE_ADD(date,INTERVAL expr unit) :指定日期加上指定的时间(可以为年月日)
DATE_SUB(date,INTERVAL expr unit)
3.
CONCAT(str1,str2,...):字符串连接
LENGTH(str):字符串长度
lpad('aaa',个数,'添加的东西'):右边添加
RPAD(str,len,padstr):左边添加
创建了虚表
数学函数
abs()绝对值
select abs(-19) from test
round(x,y) :精确到小数点后y位,如果y不写精确到整数位
select round(99.567,2),round(99.565)
from test1
truncate(x,y):截断到小数点后Y位,之后清零
select truncate(56.66,1) ,truncate(56.66,1),truncate(56.66,-1) from test1
字符串函数
substr(str,pos,length):str操作的字符串,pos开始的位置,length从开始截取的长度(不可以截取字符串)
select substr('hello ',1,3)
from test1
以s,j,m开头的员工姓名
select ename
from emp
where substr(ename,1,1) in('s','j','m')
select ename
from emp
where ename like 's%'or ename like 'j%' or ename like'm%'
length():字符串长度
select ename
from emp
where length(ename)=5
-- 1.CONCAT(str1,str2,...)连接字符串
select ename,CONCAT(substr(ename,1,1),lower(substr(ename,2))),length(ename)
from emp
where substr(ename,1,1) in ('J','A','M')
order by ename
-- 2.ropad(),lpad()左右添加*
select concat(rpad(empno,10,'*'),rpad(ename,10,'*'),lpad(sal,10,'*'))
from emp
其中str1是第一个字符串,length是结果字符串的长度,str2是一个填充字符串。如果str1的长度没有length那么长,则使用str2填充;如果str1的长度大于length,则截断。
str1的长度 < length
mysql> select lpad('hi',4,'xxx') ;
+--------------------+
| lpad('hi',4,'xxx') |
+--------------------+
| xxhi |
+--------------------+
1 row in set (0.00 sec)
str1的长度> length
mysql> select lpad('hi',1,'xxx') ;
+--------------------+
| lpad('hi',1,'xxx') |
+--------------------+
| h |
+--------------------+
1 row in set (0.00 sec)
————————————————
日期函数
MySQL 5.6以后日期支持默认值
create table test8(
dataa datetime dafault NOW()
)
CURDATE()和 CURRENT_DATE():获取当前日期:年月日
curtime():当前的时分秒
now()获取当前日期:年月日时分秒
select CURDATE(),CURRENT_DATE(),NOW()
from test1
date_format(date,format)格式化日期(将日期格式改为规定格式)
--%Y--年
-- %m--月
-- %d--日
-- %h--小时 %H(24进制)
-- %i--分
-- %s --秒
datediff(expr1,expr2):返回俩个日期相差的天数(大的日期在前边)
select hiredate,DATEDIFF(curdate(),hiredate)
from emp
extract()提取时间,给定日期的,年月日时分秒
select hiredate,
extract(YEAR FROM hiredate),
extract(month FROM hiredate),
extract(DAY FROM hiredate),
extract(HOUR FROM NOW()),
extract(MINUTE FROM NOW()),
extract(SECOND FROM NOW())
FROM emp
ifnull(参数1,参数2):参数1为空的话,返回参数二
TIMESTAMPDIFF(MONTH,'2000-01-1',NOW()) :返回指定的日期相差的时间(可以为年月日)
-- 计算2000年1月1日到现在多少个月,多少周
select TIMESTAMPDIFF(MONTH,'2000-01-1',NOW()) 月,TIMESTAMPDIFF(WEEK,'2000-01-1',NOW()) 周
FROM test1
DATE_ADD(date,INTERVAL expr unit) :指定日期加上指定的时间(可以为年月日)
DATE_SUB(date,INTERVAL expr unit)
select ename,hiredate,
DATE_ADD(hiredate,INTERVAL 6 MONTH) 转正
FROM emp
流程控制函数
-- CASE.....when...then
-- DECODE(crypt_str,pass_str)
-- 查询员工姓名,工资,部门编号,部门名称
select ename,sal,deptno,(CASE deptno when 10 then '开发部'
when 20 then '实施部'
when 30 then '测试部'
else '小卖部' end ) 部门名称
from emp
- 算税金
select sal,(case
when sal<1000 then 0
when sal>= 1000 and sal<2000 then sal*0.1
when sal>=2000 and sal <3000 then sal*0.15
else sal*0.2 end) 税金
from emp
select sal,(case TRUNCATE(sal/1000,0)
when 0 then 0
when 1 then sal*0.1
when 2 then sal*0.15
else sal*0.2 end) 税金
from emp