目錄
一、MySQL函數(shù)介紹
二、MySQL函數(shù)分類
(一)單行函數(shù)
①字符串函數(shù)
②數(shù)學(xué)函數(shù)
③日期函數(shù)
④流程控制函數(shù)
⑤系統(tǒng)信息函數(shù)
⑥其他函數(shù)
(二)聚合函數(shù)
三、函數(shù)使用示例
(一)字符函數(shù)
①length(str)函數(shù)
②concat(str1,str2,...)函數(shù)
③upper(str)、lower(str)函數(shù)
④substr(str,start,len)函數(shù)
⑤instr(str,要查找的子串)函數(shù)
③trim(str)函數(shù)
⑧l(xiāng)pad(str,len,填充字符)、rpad(str,len,填充字符)函數(shù)
⑨replace(str,子串,另一個字符串)函數(shù)
(二)數(shù)學(xué)函數(shù)
①round(x,保留位數(shù))函數(shù)
②ceil(x)函數(shù)
③floor(x)函數(shù)
④truncate(x,D)函數(shù)
⑤mod(被除數(shù),除數(shù))函數(shù)
⑥pow(x,D)函數(shù)
?(三)時間與日期函數(shù)
①時間與日期函數(shù)含義
②now()函數(shù)
③curdate()函數(shù)
④curtime()函數(shù)
⑤獲取日期和時間中的年、月、日、時、分、秒
⑥weekofyear()函數(shù)
⑦ quarter()函數(shù)
⑧ str_to_date()函數(shù)
⑨date_format()函數(shù)
⑩date_add(日期,interval num 時間)函數(shù)
?last_day()函數(shù)
?datediff(end_date,start_date)函數(shù)
?timestampdiff(unit,start_date,end_date)函數(shù)
(四) 流程控制函數(shù)
①if(expr,v1,v2)函數(shù)
②ifnull()函數(shù)
③case…when函數(shù)的三種用法
(五)系統(tǒng)信息函數(shù)
①version()函數(shù)
②connection_id()函數(shù)
③processlist
④database(),schema()函數(shù)
⑤user(),current_user(),system_user()函數(shù)
⑥charset()函數(shù)
⑦collation()函數(shù)
(六) 其他函數(shù)
①FORMAT(x,y)函數(shù)
② INET_ATON(ip)函數(shù)
③INET_NTOA(NUM)函數(shù)
④password(str)函數(shù)
⑤md5(str)函數(shù)
⑥encode(str,pswd_str)、decode(加密的字符串,pswd_str)函數(shù)
(七)聚合函數(shù)
①功能與分類
②聚合函數(shù)的傳入?yún)?shù),數(shù)據(jù)類型
一、MySQL函數(shù)介紹
MySQL是 MySQL 數(shù)據(jù)庫提供的內(nèi)部函數(shù),這些內(nèi)部函數(shù)可以幫助用戶更加方便地處理表中的數(shù)據(jù)。函數(shù)就像預(yù)定的公式一樣存放在數(shù)據(jù)庫里,每個用戶都可以調(diào)用已經(jīng)存在的函數(shù)來完成某些功能。
同時MySQL數(shù)據(jù)庫還支持用戶自己建立函數(shù),以適應(yīng)實際的業(yè)務(wù)操作。正確使用函數(shù)會讓讀者在編寫 SQL 語句時起到事半功倍的效果。
二、MySQL函數(shù)分類
(一)單行函數(shù)
①字符串函數(shù)
主要用于處理字符串。其中包括字符串連接函數(shù)、字符串比較函數(shù)、將字符串的字母都變成小寫或大寫字母的函數(shù)和獲取子串的函數(shù)等。
②數(shù)學(xué)函數(shù)
主要用于處理數(shù)字。這類函數(shù)包括絕對值函數(shù)、正弦函數(shù)、余弦函數(shù)和獲得隨機數(shù)的函數(shù)等。
③日期函數(shù)
主要用于處理日期和時間。其中包括獲取當(dāng)前時間的函數(shù)、獲取當(dāng)前日期的函數(shù)、返回年份的函數(shù)和返回日期的函數(shù)等。
④流程控制函數(shù)
主要用于在 SQL 語句中控制條件選擇。其中包括 IF 語句、CASE 語句和 WHERE 語句
⑤系統(tǒng)信息函數(shù)
主要用于獲取 MySQL 數(shù)據(jù)庫的系統(tǒng)信息。其中包括獲取數(shù)據(jù)庫名的函數(shù)、獲取當(dāng)前用戶的函數(shù)和獲取數(shù)據(jù)庫版本的函數(shù)等。
⑥其他函數(shù)
主要包括格式化函數(shù)和鎖函數(shù)等。
(二)聚合函數(shù)
AVG(平均值)函數(shù):返回指定組的平均值,空值會被忽略。
COUNT(統(tǒng)計)函數(shù):返回指定組中項目的總數(shù)量。
MAX(最大值)函數(shù):返回指定數(shù)據(jù)的最大值。
MIN(最小值)函數(shù):返回指定數(shù)據(jù)的最小值。
SUM(求和)函數(shù):返回指定數(shù)據(jù)的和,只能用于數(shù)字列,空值會被忽略。
三、函數(shù)使用示例
(一)字符函數(shù)
①length(str)函數(shù)
獲取參數(shù)值的字節(jié)個數(shù)
對于utf-8
字符集來說,一個英文占1個字節(jié);一個中文占3個字節(jié);
對于gbk
字符集來說,一個英文占1個字節(jié);一個中文占2個字節(jié);
演示如下:
select length('關(guān)注作者') as 長度;
②concat(str1,str2,...)函數(shù)
將字符串拼接,通過輸入的參數(shù)str1、str2等,將他們拼接成一個字符串。
演示如下:
select concat('作者','-','Sheenky') as 作者信息;
③upper(str)、lower(str)函數(shù)
upper(str):將字符中的所有字母變?yōu)榇髮?/p>
lower(str)將字符中的所有字母變成小寫
演示如下:
select upper('sheenky') as 大寫;
select lower('SHEENKY') as 小寫;
④substr(str,start,len)函數(shù)
str為輸入字符串,從start位置開始截取字符串,len表示要截取的長度; 沒有指定len長度:表示從start開始起,截取到字符串末尾。指定了len長度:表示從start開始起,截取len個長度。
select substr('學(xué)SQL就關(guān)注博主sheenky',2,8) as out_put;
注:2是開始位置,此處起始位置為‘學(xué)’所對應(yīng)的位置是1,這和編程語言中的0為起始位置不一樣。
此外8是開始到結(jié)束位置的長度,并不是索引的結(jié)束位置,這很容易和Python的索引弄錯。
⑤instr(str,要查找的子串)函數(shù)
返回子串第一次出現(xiàn)的索引,如果找不到,返回0; 當(dāng)查找的子串存在于字符串中:返回該子串在字符串中【第一次】出現(xiàn)的索引。當(dāng)查找的子串不在字符串中:返回0。
演示如下:
select instr('學(xué)SQL就關(guān)注博主sheenky','關(guān)注') as 第一次出現(xiàn);
③trim(str)函數(shù)
去掉字符串前后的空格; 該函數(shù)只能去掉字符串前后的空格,不能去掉字符串中間的空格。
演示如下:
select trim(' 學(xué)SQL就 關(guān)注博主 sheenky ') as 空格去除;
?⑧l(xiāng)pad(str,len,填充字符)、rpad(str,len,填充字符)函數(shù)
lpad(左填充):用指定的字符,實現(xiàn)對字符串左填充指定長度
rpad(右填充):用指定的字符,實現(xiàn)對字符串右填充指定長度
select lpad('編程禿頭',10,'tu') as out_put;
select rpad('編程禿頭',10,'tu') as out_put;
?注:這里的填充len指的是用填充字符填充后的總長度,也就是若你的len選擇5你的字符串含有位置為4則只能填充一個字符,也就是填充字符的第一個字符。
⑨replace(str,子串,另一個字符串)函數(shù)
將字符串str中的字串,替換為另一個字符串
演示如下:
select replace(NAME,'符興','符強') as 替換之后 from tb_teacher;
?注:replace()方法只能查找指定列,而不能使用全局查找,想要全局查找替換,可以試試循環(huán)語句。
(二)數(shù)學(xué)函數(shù)
①round(x,保留位數(shù))函數(shù)
四舍五入; 當(dāng)對正數(shù)進行四舍五入:按照正常的計算方式,四舍五入即可。當(dāng)對負(fù)數(shù)進行四舍五入:先把符號丟到一邊,對去掉負(fù)號后的正數(shù)進行四舍五入,完成以后,再把這個負(fù)號,補上即可。
演示如下:
select round(1.595658,3) as out_put;
②ceil(x)函數(shù)
向上取整,返回>=該參數(shù)的最小整數(shù)。求的是大于等于這個數(shù)字的最小整數(shù)
演示如下:
select ceil(1.9) as out_put;
select ceil(1.1) as out_put;
③floor(x)函數(shù)
向下取整,返回<=該參數(shù)的最大整數(shù),求的是小于等于這個數(shù)字的最大整數(shù)。
演示如下:
select floor(1.99) as out_put;
select floor(1.1) as out_put;
④truncate(x,D)函數(shù)
此函數(shù)叫截斷函數(shù),顧名思義就是就是截取不要的部分,然后刪掉(斷掉)它。在小數(shù)點的D位置處,截取數(shù)字直接刪去數(shù)字,若在左邊就是位置取整不使用任何法則。
這個函數(shù)理解起來也不難,我們把truncate當(dāng)作小數(shù)點(.)x是要截取的數(shù)字。D為正數(shù)時是小數(shù)點的右側(cè)部分,D為0時則不要小數(shù)部分,D為負(fù)數(shù)時是小數(shù)點左邊部分,具體使用看例子演示。
演示如下:
select truncate(314159.2673525,5) as 截取之后;
select truncate(314159.2673525,0) as 截取之后;
select truncate(314159.2673525,-4) as 截取之后;
?⑤mod(被除數(shù),除數(shù))函數(shù)
取余; 當(dāng)被除數(shù)為正數(shù),結(jié)果就是正數(shù)。當(dāng)被除數(shù)為負(fù)數(shù),結(jié)果就是負(fù)數(shù)。
演示如下:
select mod(10,3) as out_put;
⑥pow(x,D)函數(shù)
此函數(shù)是用于計算指數(shù)函數(shù),x為底,D為指數(shù)
演示如下:
select pow(5,2) as 平方運算;
?(三)時間與日期函數(shù)
①時間與日期函數(shù)含義
日期的含義:指的是我們常說的年、月、日。
時間的含義:指的是我們常說的時、分、秒。
補充時間格式符含義表
序號 | 格式符 | 含義 |
1 | %Y | 四位的年份 |
2 | %y | 2位的年份 |
3 | %m | 月份(01,02,..11,12) |
4 | %c | 月份(1,2,3...11,12) |
5 | %d | 日(01,02,...) |
6 | %H | 小時(24小時) |
7 | %h | 小時(12小時) |
8 | %i | 分鐘(00,01,...59) |
9 | %s | 秒(00,01,...59) |
②now()函數(shù)
返回當(dāng)前系統(tǒng)的日期和時間
演示如下:
select now() as 當(dāng)前時間;
③curdate()函數(shù)
只返回系統(tǒng)當(dāng)前的日期,不包含時間
演示如下:
select surdate() as 當(dāng)前日期;
?④curtime()函數(shù)
只返回當(dāng)前的時間,不包含日期
演示如下:
⑤獲取日期和時間中的年、月、日、時、分、秒
獲取年份:year()
獲取月份:month()
獲取日:day()
獲取小時:hour()
獲取分鐘:minute()
獲取秒數(shù):second()
⑥weekofyear()函數(shù)
獲取當(dāng)前時刻所屬周數(shù)
演示如下:
⑦ quarter()函數(shù)
獲取當(dāng)前時刻所屬的季度
⑧ str_to_date()函數(shù)
將日期格式轉(zhuǎn)換為字符串,轉(zhuǎn)換成指定格式的日期
⑨date_format()函數(shù)
將日期轉(zhuǎn)換成日期字符串
?⑩date_add(日期,interval num 時間)函數(shù)
向前、向后偏移日期和時間,正號為向后,負(fù)號為向前,除此之外還有hour(小時),minute(分鐘),second(秒)
?last_day()函數(shù)
提取某個月最后一天的日期
??datediff(end_date,start_date)函數(shù)
計算兩個時間相差的天數(shù)
演示如下:
??timestampdiff(unit,start_date,end_date)函數(shù)
計算兩個時間返回的年/月/天數(shù);
unit參數(shù)是確定(start_date,end_date)結(jié)果的單位,表示為整數(shù),以下是有效單位:
year:年份、month:月份、day:天、hour:小時、minute 分鐘、second:秒、microsecond:微秒、week:周數(shù)、quarter:季度
(四) 流程控制函數(shù)
①if(expr,v1,v2)函數(shù)
實現(xiàn)if-else的效果,如果expr是true,返回v1。如果expr是false,返回v2
演示如下
?②ifnull()函數(shù)
判斷值是否為null,是null用指定值填充;如果v1不為NULL,返回v2。否則返回v1
?③case…when
函數(shù)的三種用法
1.等值判斷:可以實現(xiàn)多條件的查詢值賽選;
case 要判斷的字段或表達式
when 常量1 then 要顯示的值1或語句1
when 常量2 then 要顯示的值2或語句2
...
else 要顯示的值n或語句n
end
2.區(qū)間判斷:類似于python中if-elif-else的效果;
case
when 條件1 then 要顯示的值1或語句1
when 條件2 then 要顯示的值2或語句2
...
else 要顯示的值n或語句n
end
3.case … when和聚合函數(shù)聯(lián)用;
此處的實例,作者引用網(wǎng)上的一個例子進行舉例
?得出如下結(jié)果:
(五)系統(tǒng)信息函數(shù)
①version()函數(shù)
查看MySQL系統(tǒng)版本信息號
②connection_id()函數(shù)
查看當(dāng)前登入用戶的連接次數(shù)數(shù)
直接調(diào)用CONNECTION_ID()函數(shù)--不需任何參數(shù)--就可以看到當(dāng)下連接MySQL服務(wù)器的連接次數(shù),不同時間段該函數(shù)返回值可能是不一樣的
③processlist
查看用戶的連接信息
Id列:登錄MySQL的用戶標(biāo)識,是系統(tǒng)自動分配的CONNECTION ID;
User列:顯示當(dāng)前的“用戶名”;
Host列:顯示執(zhí)行這個語句的IP,用來追蹤出現(xiàn)問題語句的用戶;
db列:顯示這個進程目前連接的是哪個數(shù)據(jù)庫;
Command列:顯示當(dāng)前連接執(zhí)行的命令,一般是休眠(Sleep)、查詢(Query)、連接(Connect);
Time列:顯示這個狀態(tài)持續(xù)的時間,單位是秒;
State列:顯示使用當(dāng)前連接的SQL語句的狀態(tài),包含有:Copying to tmptable、Sorting result、Sending data等狀態(tài);
Info列:顯示當(dāng)前SQL的內(nèi)容,如果語句過長可能無法顯示完全。
?④database(),schema()函數(shù)
查看當(dāng)前使用的數(shù)據(jù)庫
?⑤user(),current_user(),system_user()函數(shù)
獲取當(dāng)前用戶
⑥charset()函數(shù)
使用CHARSET()
函數(shù)返回字符串使用的字符集
?⑦collation()函數(shù)
使用COLLATION()
函數(shù)返回字符串排列方式
(六) 其他函數(shù)
①FORMAT(x,y)函數(shù)
把x格式化為以逗號隔開的數(shù)字序列,y是結(jié)果的小數(shù)位數(shù)。
② INET_ATON(ip)函數(shù)
返回IP地址的數(shù)字表示
③INET_NTOA(NUM)函數(shù)
返回數(shù)字所代表的IP地址。
?④password(str)函數(shù)
密碼加密函數(shù),str為NULL,返回NULL。
password在MySQL服務(wù)器鑒定系統(tǒng)中使用。不應(yīng)該用在個人的應(yīng)用程序中。
加密是單向的(不可逆),加密后的密碼保存到用戶權(quán)限表中。
執(zhí)行密碼加密與UNIX中密碼加密方式不同。
⑤md5(str)函數(shù)
加密函數(shù);
參數(shù)為字符串,該函數(shù)為字符串算出一個MD5 128比特校驗和
返回值以32位16進制數(shù)字的二進制字符串形式返回
str為NULL,返回NULL
?⑥encode(str,pswd_str)、decode(加密的字符串,pswd_str)函數(shù)
加密:encode(被加密的密碼,密碼);
解密:decode(encode(被加密的密碼,密碼),密碼);?? //也可以用上面返回的二進制字符串
(七)聚合函數(shù)
①功能與分類
功能:用作統(tǒng)計使用,又稱為聚合函數(shù)或統(tǒng)計函數(shù)或組函數(shù)
分類:sum 求和avg 平均值max 最大值min 最小值count 計算個數(shù)
?②聚合函數(shù)的傳入?yún)?shù),數(shù)據(jù)類型
1、sum()函數(shù)和avg()函數(shù):傳入整型/小數(shù)類型才有意義;
2、sum()函數(shù)和avg()函數(shù)對于字符串類型、日期/時間類型的計算都沒有太大意義。因此,sum()函數(shù)和avg()函數(shù),我們只用來對小數(shù)類型和整型進行求和。跳過空值行。
3、max()函數(shù)和min()函數(shù):傳入整型/小數(shù)類型、日期/時間類型意義較大
4、可以傳入任何數(shù)據(jù)類型,但是碰到null要注意,空值跳過,不計數(shù)。文章來源:http://www.zghlxwxcb.cn/news/detail-444026.html
注;sum()/count(*)方法計算平均值時,有時候得到的結(jié)果和AVG()函數(shù)不一定一樣。當(dāng)存在某計算列空值但其他列不是空值的時候就會出現(xiàn)不一樣的結(jié)果,因為分母count(*)并沒有跳過空值列。文章來源地址http://www.zghlxwxcb.cn/news/detail-444026.html
到了這里,關(guān)于齊全且實用的MySQL函數(shù)使用大全的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!