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;
查詢結果如下圖: