- 单行函数:传一个值,得到一个值: length concat
- 分组函数:传一组值,得到一个值:sum,max,min
(一)单行函数
单行函数又可以分为:
- 字符函数:length,concat,upper,lower,substr,instr,trim,lpad,rpad,replace,
- 数学函数:round ,ceil, floor,truncate,mod
- 日期函数:now,curdate,curtime,year,month…monthname,str_to_date,date_format
- 其他函数:version,database,user
- 流程控制函数: if,case
1.字符函数
# 字符函数
#1.LENGTH 判断字符的长度
select
first_name,
length(first_name) as 'first_name\'s length'
from
employees ;
#2.concat 连接字符
select
concat(first_name, ' ', last_name) as fullname
from
employees ;
#3upper 将参数中所有字符大写
select
upper(first_name) as upperFirstname ,
lower(last_name) as lowerLastname
from
employees ;
#4.substr(或者substring)的四种方式,需要注意的是SQL中的索引都是从1开始的
#4.1 从第n个开始到最后
select substr('123454321',4);
#4.2 从第n个开始的长度为m的字符串
select substr('123454321',1,2);
select substr('123454321',-3,2);
#5.instr 查找在某个字符串中第一个出现的子串的位置
select instr('123454','4');
#6. trim 从左右两头分别修建字符(默认为空格,也可以指定修剪字符)
select trim(' notSpace notSpace ');
select trim( 'aa' from 'aaaaaNNNNNNNNNaaaaaaaNNNNNNa');
#7.lpad,rpad. l和r意味着左和右,pad意为填充,中间的参数是指总长度为多少
select lpad('test',11,'leftPad');
select rpad('test',12,'rightPad');
#8.replace
select replace('111122223333','111','222');
2.数学函数
数学函数
#1.round四舍五入,第二个参数表明保留到小数点后几位
select round(1.4);
select round(1.56789,3);
#2.ceil向上取整,floor 向下取整
select
ceil(1.4443333),
ceil(- 1.4434),
floor(1.555557576),
floor(- 2.45) ;
#3.truncate小数点后截断
select truncate(1.123456789, 4) ;
#4.mod 取余,其实取余的操作就是一个公示例如:MOD(m,n)=m-(m/n)n
select mod(-1,4);
3.日期函数
#日期函数
#1.now 当前时间,包括日期和具体时间
SELECT NOW() ;
#2.curdate 当前日期,curtime 当前具体时间
SELECT
CURDATE() ,
CURTIME() ;
#3.year,month,day,hour,minute,second,获取时间中具体的某个值
SELECT
YEAR(NOW()),
MONTH(NOW()),
MONTHNAME(NOW()),
DAY(NOW()),
HOUR(NOW()),
MINUTE(NOW()),
SECOND(NOW());
#4.str_to_date 将一个字符串转换成日期
SELECT STR_TO_DATE('2000年1月16日','%Y年%c月%d日');
SELECT STR_TO_DATE('2017/01/02', '%Y/%m/%d');
#5. date_format 将一个日期转换成字符串
SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日');
4. 流程控制函数
流程控制函数
#1.if 通过if可以达到控制的效果
select
concat(first_name, '_', last_name) as 'name',
if(
salary >= 10000,
'person top person',
'person under person'
) as 'level'
from
employees ;
#2.case函数,有两种用法
#2.1 类似于编程语言中的switch on用法
select
CONCAT(first_name, '_', last_name) AS 'name',
case department_id
when 90 then 'Finance Department'
when 60 then 'Hunman Resource Department'
when 100 then 'Marketing Department'
else 'Son OF A Bitch Department'
end As Department
from employees;
#2.2 类似于编程语言中的多重if else
select
CONCAT(first_name, '_', last_name) AS 'Name',
case
when salary>=10000 then 'Person top person'
when salary>=8000 then 'Just a worker'
when salary>=5000 then 'You are a joker'
else 'Trash'
end as 'level'
from employees;
5.其他函数
# 其他函数
#1.version:输出当前mysql的版本
SELECT VERSION();
#2.database,
SELECT DATABASE();
#3.user
SELECT USER();
(二)分组函数
- sum:求和
- avg:平均值
- min:最小值
- max:最大值
- count:列的个数
#首先要说明的是 所有的分组函数都会忽略 NULL
#1 sum:总和
SELECT
SUM(salary)
FROM
employees ;
#2.avg:平均值
SELECT AVG(salary)
FROM employees;
#3.min,max:最大值和最小值
SELECT MAX(salary),MIN(salary)
FROM employees;
#4.count:列的个数
SELECT COUNT(`employee_id`)
FROM employees;