MySQL基礎:函式
函式是指一段可以直接被另一段程式呼叫的程式或代碼,
字串函式
MySQL中內置了很多字串函式,常用的幾個如下:
| 函式 | 功能 |
|---|---|
| CONCAT(S1,S2,...Sn) | 字串拼接,將S1,S2,...Sn拼接成一個字串 |
| LOWER(str) | 將字串str全部轉為小寫 |
| UPPER(str) | 將字串str全部轉為大寫 |
| LPAD(str,n,pad) | 左填充,用字串pad對str的左邊進行填充,達到n個字串長度 |
| RPAD(str,n,pad) | 左填充,用字串pad對str的右邊進行填充,達到n個字串長度 |
| TRIM(str) | 去掉字串頭部和尾部的空格 |
| SUBSTRING(str,start,len) | 回傳字串str從start(索引值從1開始)位置起的len個長度的字串 |
實體:
--將員工的編號統一為五位數,目前不足五位數的全部在前面補0,比如一號員工的編號應該為:00001
update emp set wordno = lpad(wordno, 5, '0');
數值函式
常見的數值函式如下:
| 函式 | 功能 |
|---|---|
| CELL(x) | 向上取整 |
| FLOOR(x) | 向下取整 |
| MOD(x,y) | 回傳x/y的模 |
| RAND() | 回傳0~1內的亂數 |
| ROUND(x,y) | 求引數x的四舍五入的值,保留y位小數 |
日期函式
常見的日期函式如下:
| 函式 | 功能 |
|---|---|
| CURDATE() | 回傳當前日期 |
| CURTIME() | 回傳當前時間 |
| NOW() | 回傳當前日期和時間 |
| YEAR(date) | 獲取指定date的年份 |
| MONTH(date) | 獲取指定date的月份 |
| DAY(date) | 獲取指定date的日期 |
| DATE_ADD(date,INTERVAL expr type) | 回傳一個日期/時間值加上一個時間間隔expr后的時間值 |
| DATEDIFF(date1,date2) | 回傳起始時間date1和結束時間date2之間的天數(date1-date2) |
例子:
select year(now());
select date_add(now(), interval 20 month );
select datediff('2021-12-01','2021-9-01');
--統計員工入職天數,并根據入職天數逆序排序
select name,datediff(curdate(), entrytime) as 'entrydays' from emp order by 'entrydays' desc;
流程函式
流程函式也是很常用的一類函式,可以在SQL陳述句中實作條件篩選,從而提高陳述句的效率,
| 函式 | 功能 |
|---|---|
| IF(value,t,f) | 如果value為true,則回傳t,否則回傳f |
| IFNULL(value1,value2) | 如果value1不為null,回傳value1,否則回傳value2 |
| CASE WHEN [val1] THEN [res1] ... ELSE [default] END | 如果val1為true,回傳res1,...否則回傳default默認值 |
| CASE [expr] WHEN [val1] THEN [res1] ... ELSE [default] END | 如果expr的值等于val1,回傳res1,...否則回傳default默認值 |
例子:
-- 查詢emp表的員工姓名和作業地址:若是在北京上海,則顯示一線城市,其他地方就顯示二線城市
select
name,
( case workaddress when '北京' then '一線城市' when '上海' then '一線城市' else '二線城市' end ) as '作業地址'
from emp;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/547710.html
標籤:MySQL
上一篇:SQL:DML、DQL、DCL
