## 1.常用函数
* concat()字符串连接
select concat(first_name,'*',last_name) 姓名 from employees;
* substr()字符串截取
select SUBSTR("asdfgh",1,3) //输出asd
* upper()转为大写 lower()转为小写
* instr()返回字串第一次出现的索引值,没有出现返回0
* trim()去掉指定字符串前后两端的“指定内容”(默认是去掉空格)
select TRIM("99" FROM "99999 I like listen 999 to music666 9999");
select lenth(trim(' 张三 ')) //输出6,一个汉字=3个字节
* lpad()左填充 rpad() 右填充
* replace()用新字符串去替换旧的字符串
```
select replace("I like listen to music",'listen','listening'); //输出I like listening to music
```
* length()求出字符串的“字节数” 【utf-8中,】
* datediff()计算日期的相差天数
```
SELECT DATEDIFF('1995-2-7','1995-2-6') 相差; //相差1天(date difference)
```
## 2.数学函数
- ceil()向上取整
- floor()向下取整
- mod(X,D)
- round(X,D)
- truncate(X,D) 截取小数
```
-- select CEIL(1.26)向上取整 2
-- select FLOOR(1.26) 向下取整 1
-- SELECT ROUND(1.526,2) 保留两位小数,结果四舍五入,1.53
-- SELECT TRUNCATE(1.526,2)保留两位小数,结果不要四舍五入,1.52
-- SELECT MOD(10,-3) 被除数为正数,结果就为正 1
-- SELECT MOD(-10,3) 被除数为负数,结果就为负 -1
```
<br/>
## 3.日期函数
* now()显示‘年-月-日 时:分:秒’
* curdate()年月日
* curtime()时分秒
* str_to_date() 将字符通过指定的格式转换成日期
```
-- SELECT STR_TO_DATE('1998-3-2','%Y-%c-%d') AS out_put;
-- select str_to_date('3-2 1998','%c-%d %Y') 日期
```
* dateformat() 将日期转换成字符
```
-- select date_format(NOW(),'%m月-%d日 %Y年 %h:%i:%s' )
```
%Y:代表4位的年份 %y:代表2为的年份
%m:代表月, 格式为(01……12) %c:代表月, 格式为(1……12)
%d:代表月份中的天数,格式为(00……31) %e:代表月份中的天数, 格式为(0……31)
%H:代表小时,格式为(00……23) %k:代表 小时,格式为(0……23)
%h: 代表小时,格式为(01……12) %I: 代表小时,格式为(01……12)
%l :代表小时,格式为(1……12)
%i: 代表分钟, 格式为(00……59) 【只有这一个代表分钟,大写的I 不代表分钟代表小时】
%S:代表 秒,格式为(00……59) %s:代表 秒,格式为(00……59)
%r:代表 时间,格式为12 小时(hh:mm:ss [AP]M)
%T:代表 时间,格式为24 小时(hh:mm:ss)
<br>
## 4.流程控制函数
* if函数: if else 的效果
```
SELECT IF(10<5,'大','小');
SELECT last_name,commission_pct,IF(commission_pct IS NULL,'没奖金,呵呵','有奖金,嘻嘻') 备注
FROM employees;
```
* case函数的使用: switch case 的效果
```
/*
java中
switch(变量或表达式){
case 常量1:语句1;break;
...
default:语句n;break;
}
mysql中
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
...
else 要显示的值n或语句n;
end
*/
```
**案例1:查询员工的工资**
```
SELECT salary 原始工资,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;
```
**案例2:查询员工的工资的情况**
```
select salary,
case salary
when salary>20000 then 'A'
when salary>15000 then 'B'
when salary>10000 then 'C'
else 'D'
end as 工资等级
from employees;
```
***********************************************************************************