MySQL聚合、日期、字符串等函數深度剖析
MySQL系列
前言
MySQL 提供了豐富的內置函數,用于處理數據、執(zhí)行計算、轉換格式等操作,本篇將介紹MySQL中常用的一些函數。本篇文章內容已操作為主
這里的函數比較簡單,不再解釋了,再對其解釋就有一種強說愁的感覺了
上篇文章:MySQL 數據操作全流程:創(chuàng)建、讀取、更新與刪除實戰(zhàn)
一、聚合函數
這部分函數都比較簡單
| 函數名 | 作用 | 示例 | 結果 |
|---|---|---|---|
SUM(col) | 求和 | SUM(amount) | 所有 amount 的總和 |
AVG(col) | 平均值 | AVG(age) | 平均年齡 |
COUNT(col) | 計數(忽略 NULL) | COUNT(id) | 行數 |
COUNT(*) | 計數(包含 NULL) | COUNT(*) | 總行數 |
MAX(col) | 最大值 | MAX(score) | 最高分數 |
MIN(col) | 最小值 | MIN(price) | 最低價格 |
測試表
CREATE TABLE students ( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, sn INT NOT NULL UNIQUE COMMENT '學號', name VARCHAR(20) NOT NULL, qq VARCHAR(20) ); create table exam_result ( id int unsigned primary key auto_increment, name varchar(20) not null comment '同學姓名', chinese float default 0.0 comment '語文成績', math float default 0.0 comment '數學成績', english float default 0.0 comment '英語成績' );
表內容


本篇文章主要以上面兩表做測試,上篇文章中已經創(chuàng)建,這里直接使用
1、統(tǒng)計班級共有多少同學
select count(*) from students;

2、統(tǒng)計班級有多少 qq 號
select count(qq) from students;

對比上表可以看到count函數,對于NULL值,不做統(tǒng)計。
3、統(tǒng)計本次考試的數學成績分數個數
select count(math) from exam_result;

對比上表可以看到count函數,對于重復值,不做統(tǒng)計。
4、統(tǒng)計數學成績不及格人數
select count(math) from exam_result where math<60;

count函數可以配合其他語句使用。
5、統(tǒng)計平均總分
select avg(math+chinese+english) 平均總分 from exam_result ;

6、返回英語最高分
select max(english) from exam_result ;

7、返回 > 70 分以上的數學最低分
select min(math) from exam_result where math >70;

二、日期函數

1、獲取當前年月日
select current_date();

2、獲取當前時分秒
select current_time;

3、獲取時間戳
select current_timestamp;

4、在時間中提取日期部分
select date(current_timestamp());

5、在日期的基礎上加上日期
select date_add(current_date,interval 10 day);

獲取當前日期,并在該日期的基礎上增加十天
interval后可以根據需要使用不同單位(年、月、日、分、秒)
6、在日期的基礎上減去日期
select date_sub(current_date,interval 10 day);

獲取當前日期,并在該日期的基礎上減去十天
7、計算兩個日期之間相差多少天
select datediff(current_date,'1949-10-01');

中國成立,距今多少天
8、獲取當前日期和時間
select now();

9、測試
//創(chuàng)建一個留言表
create table msg (
id int primary key auto_increment,
content varchar(30) not null,
sendtime datetime
);
//向表中插入測試數據
insert into msg(content,sendtime) values('hello1', now());
insert into msg(content,sendtime) values('hello2', now());
select * from msg;顯示所有留言信息,發(fā)布日期只顯示日期,不用顯示時間:

查詢在1分鐘內發(fā)布的帖子:

可以看到日期是支持直接比較的
三、字符串函數
函數都可以配合select操作對表中的數據進行操作,這里僅對部分場景做演示

1、查看字符串的字符集
select charset(string);

2、要求顯示exam_result表中的信息,顯示格式:“XXX的語文分:XXX,數學分:XXX,英語分:XXX”

3、在字符串中查找字符串
select instr(string,substring);
在string中查找字符串substring出現的位置,找到返回下標(從1開始),未找到返回0。

當目標字符串重復出現時,返回的時第一次出現的下標
4、字符串轉為大寫
select ucase(strig);

5、字符串轉為小寫
select lcase(string);

6、從字符串左端提取len個字符
select left(string,len);

6、從字符串右端提取len個字符
select right(string,len);

7、求字符串占用的字節(jié)數
selecty

length()函數在 MySQL 中計算的是字符串的字節(jié)長度,而不是字符個數,當前所使用的字符集漢字占三個字節(jié)。
8、在字符串中進行字符串的替換 replace
select replace(substring,string,str);
在substring中查找string,并將其替換為str

這種替換方式不會影響原表內容,若未找到則不做處理
9、字符串截取 substring
select substring(string,pos,len);

從字符串string的pos處開始,向后截取len個字符。
10、去除字符串中最開始和最后的空格 trim
- trime:去除字符串兩端空格
- ltrim:去除字符串最左邊的空格
- rtrim:去除字符串右邊的

在保存用戶信息數據時,一般先對數據執(zhí)行去除空格操作。由于網絡傳輸過程可能引入不可見空字符,若直接存儲含此類字符的數據,后續(xù)用戶登錄時,比如輸入密碼因存在空格匹配不上,會引發(fā)登錄失敗問題,且排查難度極大。所以,要先過濾掉字符串中的空格,再將處理后的數據存入數據庫,以此規(guī)避因隱性空格導致的登錄故障
四、數學函數

1、abs 取絕對值
select abs(N);

2、bin 轉二進制
select bin(N);

可以看到在對小數,進行二進制轉換時,會將小數進行向下取整后再操作。
3、hex 轉十六進制
select hex(N);

4、 conv 進制轉換
select conv(N,fromm_base,to_base);
將數字N,從from_base進制 轉換成 to_base進制.

5、format 格式化,保留小數
select format(N,D);

將N保留D位小數,處理小數部分遵循四舍五入,若小數部分不夠就補0.
6 mod 取模
select mod(x,y);

mod返回x對y取模的值,這里負數取模的方式大家可以自己嘗試。
7、rand生成隨機數
select rand();

生成的數是從 0.0 ~ 1.0,若想要生成指定范圍的我們就直接 * 10n即可實現(如 * 10的話就是 0 ~ 10)
8、ceiling 向上取整
select ceiling(N);

可以看到向上取整,就是當存在小述部分時,去掉小鼠部分直接+1;
9、floor 向下取整
select floor(N);

五、其他函數
1、查看當前用戶 user
select user();

獲取當前連接到 MySQL 服務器的用戶信息,返回結果的格式為 用戶名@主機名'
2、database查看當前數據庫
select database();

返回當前會話中使用的數據庫名稱
3、md5 加密
在實際開發(fā)中,密碼通常不會以明文形式直接存儲在數據庫中,而 MD5 哈希算法是常用的密碼加密方案之一。其核心作用是將原始密碼通過加密計算轉換為一段固定長度(32 位)的哈希字符串,從而避免明文密碼在存儲或傳輸過程中泄露的風險。

這種加密方式,缺點很多,這個我在網絡傳輸部分已經介紹了,這里就補贅述了。
4、ifnull(val1,val2)
當 val1 為 NULL 時返回 val2,否則返回 val1 本身

到此這篇關于MySQL聚合、日期、字符串等函數深度剖析的文章就介紹到這了,更多相關mysql聚合日期字符串函數內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
mysql 啟動1067錯誤及修改字符集重啟之后復原無效問題
這篇文章主要介紹了mysql 啟動1067錯誤及修改字符集重啟之后復原無效問題,需要的朋友可以參考下2017-10-10
mysql處理添加外鍵時提示error 150 問題的解決方法
當你試圖在mysql中創(chuàng)建一個外鍵的時候,這個出錯會經常發(fā)生,這是非常令人沮喪的2011-11-11

