30 MySQL 的系統函式
阿新 • 來源:網路 • 發佈:2020-06-25
Mysql 提供了很多的系統函式,這些系統函式可以對資料進行特殊的處理,下面表格列舉了大部分的系統函式,本小節選擇一些代表性的系統函式演示說明。
| 函式名 | 說明 |
|---|---|
| CONCAT(str0,str1) | 將兩個欄位的值拼接在一起 |
| CONCAT_WS(“拼接符”,str0,str1) | 將兩個欄位的值使用指定拼接符拼接在一起 |
| GROUP_CONCAT(expr) | 將指定分組的欄位內容拼接在一起 |
| UPPER(str) | 將字串包含的英文字元小寫轉化成大寫 |
| lOWER(str) | 將字串包含的英文字元大寫轉化成小寫 |
| INITCAP(str) | 將字串的首字母變成大寫 |
| LENGTH(str) | 獲取字串的長度 |
| SUBSTR(str FROM pos FOR len) | 擷取字串,其中 pos 表示其實位置,len 表示結束位置 |
| TRIM(str) | 去除字串兩邊空格 |
| INSTR(str,substr) | 查詢指定字元在字串的中的位置,其中 substr 表示需要查詢的字元,例如 'Tom' 中 'T' 的位置為 1,'m' 的位置為 3 |
| LPAD(str,len,padstr) | 左填充,其中 len,表示字串總長度,padstr 表示填充的字元 |
| RPAD(str,len,padstr) | 右填充,其中 len,表示字串總長度,padstr 表示填充的字元 |
| LEFT(str,len) | 取一個字串的前多少位 |
| RIGHT(str,len) | 取一個字串的後多少位 |
| CEIL(X) | 向上取整 |
| FLOOR(X) | 向下取整 |
| MOD(N,M) | 取餘,例如 MOD(age,5),將欄位 age 除以 5,除不盡的取餘數 |
| POWER(X,Y) | 冪運算,例如 MOD(age,2),獲取欄位 age 值的 2 次方的值 |
| NOW() | 獲取當前日期和時間 |
| CURDATE() | 獲取當前日期,不包含時間 |
| CURTIME() | 獲取當前時間,不包含日期 |
| YEAR(now()) | 獲取當前的年份 |
| HOUR(NOW()) | 獲取當前時間的小時數 |
| MINUTE(now()) | 獲取當前時間的分鐘數 |
| SECOND(NOW()) | 獲取當前時間的秒數 |
| MONTHNAME(now()) | 獲取當前日期的英文月份 |
| MONTH(NOW()) | 獲取當前日期的數字月份 |
| DATE_ADD(date,INTERVAL expr unit) | 查詢日期的變化,例如 DATE_ADD(‘2020-03-03’,INTERVAL 10 day) 表示 2020-03-03 十天之後的日期 |
| DATEDIFF(expr1,expr2) | 日期差,例如 DATEDIFF('2019-12-29','2019-12-01') 表示 2019-12-29 距離 2019-12-01 的天數 |
| DATE_FORMAT(date,format) | 將指定日期轉化為自定義格式,例如 DATE_FORMAT('2019-12-29','%m/%d/%y') ,其中 %m 表示前面對應的月份,%d 表示前面對應的日期的天數,%y 表示前面對應的年份 |
| STR_TO_DATE(str,format) | 將指定日期轉化為自定義格式,例如 DATE_FORMAT('12-29-2019','%m/%d/%y') |
| DATE_FORMAT(date,format) | 將指定日期轉化為自定義格式,例如 DATE_FORMAT('2019/12/29','%m/%d/%y') |
| MD5(str) | 對字串進行 MD5 轉換 |
| UNIX_TIMESTAMP() | 將指定日期轉化為時間戳 |
| COUNT() | 獲取查詢結果集條數 |
| AVG(expr) | 獲取指定列平均值 |
| SUM(expr) | 獲取指定欄位值的總和 |
| MIN(expr) | 獲取指定欄位值的最小值 |
| MAX(expr) | 獲取指定欄位值的最大值 |
1. CONCAT 拼接欄位
以 teacher 表為例,將教師資訊的 name 和 id_number 欄位的值拼接在一起:
SELECT *,CONCAT(name,id_number) AS name_id_number FROM teacher;
查詢結果如下:

Tips:如上圖所示, 其中
name_id_number的值是CONCAT()函式將name和id_number的值拼接在一起。
2. GROUP_CONCAT拼接分組欄位
以 course 和 teacher 表內連線分組為例,並使用 GROUP_CONCAT 將指定的分組欄位拼接在一起:
SELECT c.teacher_id,t.*,GROUP_CONCAT(c.id) AS new_str
FROM course c
LEFT JOIN teacher t
ON c.teacher_id=t.id
GROUP BY c.teacher_id;
查詢結果如下圖;

Tips:如上圖所示, 其中
new_str的值是GROUP_CONCAT()函式將c.id的值拼接在一起,預設是 ‘,’ 拼接。
3. NOW()獲取當前日期和時間
SELECT NOW() AS date_time;
獲取結果如下圖:

4. UNIX_TIMESTAMP()將日期轉化為UNIX時間戳
將當前時間轉化為 UNIX 時間戳:
SELECT UNIX_TIMESTAMP();
獲取結果如下圖:

Tips:如上圖所示, 其中
UNIX_TIMESTAMP()函式預設獲取當前時間戳,也可以獲取指定日期的時間戳,例如UNIX_TIMESTAMP('2012-12-21')的取值為1356019200。
5. 小結
本小節介紹了 MySQL 提供的系統函式,這裡只是列舉了很多常見系統函式,選取了幾個代表性的函式,其他系統函式的使用方法完全可以參照上述舉例,需要注意的是之前的聚合函式也屬於系統函式,上述演示的幾個系統函式可以直接對資料值進行處理,也可以對查詢出來的結果集欄位列進行處理,例如將 teacher 表 name 欄位查詢出來的值轉化為大寫字母:
SELECT *,UPPER(name) AS up_name FROM teacher;
查詢結果如下圖:

