MySQL基礎:函數 函數是指一段可以直接被另一段程式調用的程式或代碼。 字元串函數 MySQL中內置了很多字元串函數,常用的幾個如下: | 函數 | 功能 | | : : | : : | | CONCAT(S1,S2,...Sn) | 字元串拼接,將S1,S2,...Sn拼接成一個字元串 | | ...
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;