## 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;
```
***********************************************************************************