MySQL 的系統(tǒng)函數(shù)
MySQL 提供了很多的系統(tǒng)函數(shù),這些系統(tǒng)函數(shù)可以對(duì)數(shù)據(jù)進(jìn)行特殊的處理,下面表格列舉了大部分的系統(tǒng)函數(shù),本小節(jié)選擇一些代表性的系統(tǒng)函數(shù)演示說(shuō)明。
函數(shù)名 | 說(shuō)明 |
---|---|
CONCAT(str0,str1) | 將兩個(gè)字段的值拼接在一起 |
CONCAT_WS(“拼接符”,str0,str1) | 將兩個(gè)字段的值使用指定拼接符拼接在一起 |
GROUP_CONCAT(expr) | 將指定分組的字段內(nèi)容拼接在一起 |
UPPER(str) | 將字符串包含的英文字符小寫轉(zhuǎn)化成大寫 |
lOWER(str) | 將字符串包含的英文字符大寫轉(zhuǎn)化成小寫 |
INITCAP(str) | 將字符串的首字母變成大寫 |
LENGTH(str) | 獲取字符串的長(zhǎng)度 |
SUBSTR(str FROM pos FOR len) | 截取字符串,其中 pos 表示其實(shí)位置,len 表示結(jié)束位置 |
TRIM(str) | 去除字符串兩邊空格 |
INSTR(str,substr) | 查找指定字符在字符串的中的位置,其中 substr 表示需要查找的字符,例如 'Tom' 中 'T' 的位置為 1 ,'m' 的位置為 3 |
LPAD(str,len,padstr) | 左填充,其中 len ,表示字符串總長(zhǎng)度,padstr 表示填充的字符 |
RPAD(str,len,padstr) | 右填充,其中 len ,表示字符串總長(zhǎng)度,padstr 表示填充的字符 |
LEFT(str,len) | 取一個(gè)字符串的前多少位 |
RIGHT(str,len) | 取一個(gè)字串的后多少位 |
CEIL(X) | 向上取整 |
FLOOR(X) | 向下取整 |
MOD(N,M) | 取余,例如 MOD(age,5),將字段 age 除以 5,除不盡的取余數(shù) |
POWER(X,Y) | 冪運(yùn)算,例如 MOD(age,2),獲取字段 age 值的 2 次方的值 |
NOW() | 獲取當(dāng)前日期和時(shí)間 |
CURDATE() | 獲取當(dāng)前日期,不包含時(shí)間 |
CURTIME() | 獲取當(dāng)前時(shí)間,不包含日期 |
YEAR(now()) | 獲取當(dāng)前的年份 |
HOUR(NOW()) | 獲取當(dāng)前時(shí)間的小時(shí)數(shù) |
MINUTE(now()) | 獲取當(dāng)前時(shí)間的分鐘數(shù) |
SECOND(NOW()) | 獲取當(dāng)前時(shí)間的秒數(shù) |
MONTHNAME(now()) | 獲取當(dāng)前日期的英文月份 |
MONTH(NOW()) | 獲取當(dāng)前日期的數(shù)字月份 |
DATE_ADD(date,INTERVAL expr unit) | 查詢?nèi)掌诘淖兓?,例?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 的天數(shù) |
DATE_FORMAT(date,format) | 將指定日期轉(zhuǎn)化為自定義格式,例如 DATE_FORMAT('2019-12-29','%m/%d/%y') ,其中 %m 表示前面對(duì)應(yīng)的月份,%d 表示前面對(duì)應(yīng)的日期的天數(shù),%y 表示前面對(duì)應(yīng)的年份 |
STR_TO_DATE(str,format) | 將指定日期轉(zhuǎn)化為自定義格式,例如 DATE_FORMAT('12-29-2019','%m/%d/%y') |
DATE_FORMAT(date,format) | 將指定日期轉(zhuǎn)化為自定義格式,例如 DATE_FORMAT('2019/12/29','%m/%d/%y') |
MD5(str) | 對(duì)字符串進(jìn)行 MD5 轉(zhuǎn)換 |
UNIX_TIMESTAMP() | 將指定日期轉(zhuǎn)化為時(shí)間戳 |
COUNT() | 獲取查詢結(jié)果集條數(shù) |
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;
查詢結(jié)果如下:
Tips:如上圖所示, 其中 name_id_number 的值是 CONCAT() 函數(shù)將 name 和 id_number 的值拼接在一起。
2. GROUP_CONCAT拼接分組字段
以 course 和 teacher 表內(nèi)連接分組為例,并使用 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;
查詢結(jié)果如下圖;
Tips:如上圖所示, 其中 new_str 的值是 GROUP_CONCAT() 函數(shù)將
c.id
的值拼接在一起,默認(rèn)是 ‘,’ 拼接。
3. NOW()獲取當(dāng)前日期和時(shí)間
SELECT NOW() AS date_time;
獲取結(jié)果如下圖:
4. UNIX_TIMESTAMP()將日期轉(zhuǎn)化為UNIX時(shí)間戳
將當(dāng)前時(shí)間轉(zhuǎn)化為 UNIX
時(shí)間戳:
SELECT UNIX_TIMESTAMP();
獲取結(jié)果如下圖:
Tips:如上圖所示, 其中
UNIX_TIMESTAMP()
函數(shù)默認(rèn)獲取當(dāng)前時(shí)間戳,也可以獲取指定日期的時(shí)間戳,例如UNIX_TIMESTAMP('2012-12-21')
的取值為1356019200
。
5. 小結(jié)
本小節(jié)介紹了 MySQL 提供的系統(tǒng)函數(shù),這里只是列舉了很多常見(jiàn)系統(tǒng)函數(shù),選取了幾個(gè)代表性的函數(shù),其他系統(tǒng)函數(shù)的使用方法完全可以參照上述舉例,需要注意的是之前的聚合函數(shù)也屬于系統(tǒng)函數(shù),上述演示的幾個(gè)系統(tǒng)函數(shù)可以直接對(duì)數(shù)據(jù)值進(jìn)行處理,也可以對(duì)查詢出來(lái)的結(jié)果集字段列進(jìn)行處理,例如將 teacher 表 name 字段查詢出來(lái)的值轉(zhuǎn)化為大寫字母:
SELECT *,UPPER(name) AS up_name FROM teacher;
查詢結(jié)果如下圖: