1.字符函数
- concat(x1,x2,***,xn):连接参数
- length(x):获取参数值的字节个数
- upper(xx)/lower(xx):把参数变大小写
- substr(str,begin):第一个参数是一个字符串,第二个参数是从截取从第begin个位置*以及后面全部的字符
- substr(str,begin,end):截取从begin到end(包括end位置)的字符
- instr(str1,str2):返回str2的第一次出现在str1中的索引(第一个字母的位置)
- trim(str):取消字符串中的空格
- trim(xx from 字符串):把在字符串中的xx全部去掉
- lpad(str1,n,str2):用指定字符str2来填充str1的左边,让总字符数凑满n个,如果n小于str1的长度,则按照n从str1的左边往右截断,即输出1到n总中的字符
- rpad:同理
- replace(str,x1,X2) :把str中的x1用x2代替
注意:myslq中1表示的就是第一个字符
2.数学函数
- round:四舍五入
- ceil:向上取整,返回>=该参数的最小整数
- floor:向下取整,返回<=该参数的最大整数
- truncate:截断,小数点后截断到几位
- mod:取余,被除数为正,则为正;被除数为负,则为负
- rand:获取随机数,返回0-1之间的小数
3.日期函数
- now:返回当前系统日期+时间
- curdate:返回当前系统日期,不包含时间
- curtime:返回当前时间,不包含日期
- 可以只取出年月日小时分钟秒 比如 year(now
- str_to_date:将日期格式的字符转换成指定格式的日期
- date_format:将日期转换成字符串
SELECT STR_TO_DATE('3-1998-2', '%c-%Y-%d'); #输出结果: 1988-03-02 #两个参数的格式样相同!,左边的符号右边也要有
SELECT
DATE_FORMAT(NOW(), ‘%Y年%m月%d日)’);
#输出当前xxxx年xx月xx日
#第一个参数的时间要是一个正常的时间,比如DATE_FORMAT(‘01-2020-02’, ‘%m月%Y年/%d日)’);就会返回NULL
[](https://imgchr.com/i/BvLCTI)
## 4.其他函数
* SELECT VERSION(); 当前数据库服务器的版本
* SELECT DATABASE(); 当前打开的数据库
* SELECT USER(); 当前用户
* password('字符'); 返回该字符的密码形式
* md5('字符'); 也是加密的一种形式(MD5)
## 5.流程控制函数
* IF(条件,条件为true输出的内容,条件为false输出的内容)
```sql
SELECT
last_name,
commission_pct,
IF(
commission_pct IS NULL,
'没奖金,呵呵',
'有奖金,嘻嘻'
) 备注
FROM
employees ;
- case的用法:
#使用一 case 要判断的字段或表达式 when 常量1 then 要显示的值1或语句1; when 常量2 then 要显示的值2或语句2; ... else 要显示的值n或语句n; end
#使用二
case
when 条件1 then 要显示的值1或语句1
when 条件2 then 要显示的值2或语句2
…
else 要显示的值n或语句n
end
注意如果when后面加语句的话记得加分号
案例(对应两种不同的用法)
```sql
SELECT
salary AS 原始工资,
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 ;
SELECT
salary,
CASE
WHEN salary > 20000
THEN 'A'
WHEN salary > 15000
THEN 'B'
WHEN salary > 10000
THEN 'C'
ELSE 'D'
END AS 工资级别
FROM
employees ;
6.分组函数(统计)
- sum(xx)/avg(xx):求和,求平均 (一般用于处理数值型数据)
- max/min:求最值 (可以处理任何类型数据)
- count(xx):计数
- 注意:以上分组函数都忽略null值,和分组函数一同查询的字段有限制,要求是group by后的字段*
提示:sum,avg,count等函数可以和DISTINCT一起用
比如:SELECT SUM(DISTINCT salary), SUM(salary) FROM employees ;
count的特殊介绍:
使用count(\) 统计一共有多少行*
SELECT COUNT(salary) FROM employees;
SELECT COUNT(*) FROM employees;
SELECT COUNT(1) FROM employees;
效率上:
- MYISAM存储引擎下,count(*)的效率高
- INNODB存储引擎下,count(*)和count(1)效率差不多,比count(字段)要高一些