MySQL的函数——聚合函数、数学函数、字符串函数、日期函数
目錄
聚合函數
group_concat
ABS(X) 取絕對值
CEIL(X) 返回大于或者等于X的最小整數
floor(X)返回小于或者等于X的最小整數
GREATEST(expr1 ...) 返回列表中的最大值
LEAST(expr1...) 返回列表中的最小值
常見的數學函數
字符串函數
CHAR_LENGTH(s)
CONCAT(s1,s2...sn) 合并字符
CONCAT_WS(x, s1,s2...sn) 指定分隔符合并
field(s,s1,s2...)
LTRIM(s) 去掉字符串 s 開始處的空格
RTRIM(s) 去掉字符串 s 結束處的空格
TRIM(s) 去掉兩端空格
MID(s,n,len) 截取字符串
POSITION(s1 IN s) 從字符串截取s1的開始位置
REPLACE(s,s1,s2) 替代函數
REVERSE(s) 字符串翻轉
RIGHT(s,n) 返回字符串 s 的后 n 個字符
STRCMP(s1,s2) 字符串比較是否相等
?字符串大小寫轉換
日期函數
UNIX_TIMESTAMP() 返回當前的時間戳
UNIX_TIMESTAMP(DATE_STRING) 解析日期為時間戳
時間戳轉固定的日期格式
CURDATE() 返回當前日期
CURRENT_TIME 返回當前時間
CURRENT_TIMESTAMP() 返回當前日期和時間
DATE() 將字符串日期轉換為標準格式日期
DATEDIFF(d1,d2) 計算日期相隔天數
計算時間差值
?格式化日期
?加減指定的時間間隔
EXTRACT(type FROM d) 返回日期的具體數值
LAST_DAY(d) 返回這一月的最后一天
MAKEDATE(year, day-of-year) 構建日期通過天數
其他日期函數
文末資源推薦
每文一語
在MySQL中,為了提高代碼重用性和隱藏實現細節,MySQL提供了很多函數。函數可以理解為別人封裝好的模板代碼。
在MySQL中,聚合函數主要由:count,sum,min,max,avg,這些簡單的組成,但是仍然有許多的聚合函數需要我們自己去了解和掌握,下面我們將詳細的介紹MySQL一些基本的函數,旨在解決我們日常的一些的業務場景問題。
聚合函數
group_concat
group_concat()函數首先根據group by指定的列進行分組,并且用分隔符分隔,將同一個分組中的值連接起來,返回一個字符串結果。
group_concat([distinct] 字段名 [order by 排序字段 asc/desc] [separator '分隔符'])它和我們最初學習的group by是有所區別的;這里的分組是將一列里面的值進行分組,然后放在跳一行的表中。
說明:
(1)使用distinct可以排除重復值;
(2)如果需要對結果中的值進行排序,可以使用order by子句;
(3)separator是一個字符串值,默認為逗號。、
準備數據集
create table emp(emp_id int primary key auto_increment comment '編號',emp_name char(20) not null default '' comment '姓名',salary decimal(10,2) not null default 0 comment '工資',department char(20) not null default '' comment '部門' );insert into emp(emp_name,salary,department) values('張晶晶',5000,'財務部'),('王飛飛',5800,'財務部'),('趙剛',6200,'財務部'),('劉小貝',5700,'人事部'), ('王大鵬',6700,'人事部'),('張小斐',5200,'人事部'),('劉云云',7500,'銷售部'),('劉云鵬',7200,'銷售部'), ('劉云鵬',7800,'銷售部'); -- 將所有員工的名字合并成一行 select group_concat(emp_name) from emp;?那么肯定有的小伙伴,對該函數有所疑問,為什么要使用該函數呢,這種函數應用場景在哪里呢?
應用場景:王老板此時需要看每個部門的人員是那些,此時的你應該怎么做,學了這個函數之后你就可以一行代碼解決。它與group by聯合使用的效果比較好,例如下面還可以指定分隔符,便于我們自己查看。
-- 指定分隔符合并 select department,group_concat(emp_name separator '-' ) from emp group by department;我們還可以指定排序方式,在這里我們可以按照他們的薪資水平進行展示,那么也顯示該函數的一個功能,這里面不單單可以對某一列進行字段分組,還可以對另外一列進行排序
-- 指定排序方式和分隔符 select department,group_concat(emp_name order by salary desc separator ';' ) from emp group by department;ABS(X) 取絕對值
-- ABS(X) -- 修改標準的字段,使其變成負數 UPDATE emp SET salary=-salary WHERE emp_name ='王大鵬'; SELECT salary from emp WHERE emp_name='王大鵬'; SELECT ABS(salary) from emp WHERE emp_name='王大鵬';CEIL(X) 返回大于或者等于X的最小整數
select ceil(1.7) #2?那么比如0.7,那么就是1
floor(X)返回小于或者等于X的最小整數
-- FLOOR(X) SELECT FLOOR(1.7)GREATEST(expr1 ...) 返回列表中的最大值
返回以下數字列表中的最大值:
SELECT GREATEST(3, 12, 34, 8, 25); -- 34
返回以下字符串列表中的最大值:
SELECT GREATEST("Google", "Runoob", "Apple");?? -- Runoob
LEAST(expr1...) 返回列表中的最小值
返回以下數字列表中的最小值:
SELECT LEAST(3, 12, 34, 8, 25); -- 3
返回以下字符串列表中的最小值:
SELECT LEAST("Google", "Runoob", "Apple");?? -- Apple
常見的數學函數
字符串函數
CHAR_LENGTH(s)
返回字符串 s 的字符數
返回字符串 RUNOOB 的字符數
SELECT CHAR_LENGTH("RUNOOB") AS '字符串長度';
SELECT emp_name as '姓名',CHAR_LENGTH(emp_name) as '名字長度' FROM emp;character_length和char_length完全相同?
CONCAT(s1,s2...sn) 合并字符
字符串 s1,s2 等多個字符串合并為一個字符串
SELECT CONCAT("123","456")CONCAT_WS(x, s1,s2...sn) 指定分隔符合并
同 CONCAT(s1,s2,...) 函數,但是每個字符串之間要加上 x,x 可以是分隔符
SQL-Tutorial-is-fun!field(s,s1,s2...)
返回第一個字符串 s 在字符串列表(s1,s2...)中的位置
c 在這個字符串列表中是第三個 注意是第一個位置喲
LTRIM(s) 去掉字符串 s 開始處的空格
有時候,針對一些不規則的數據集,我們為了節省時間可以不用其他的工具進行預處理,直接使用ltrim()函數去除前端空格,注意是前端空格喲
RTRIM(s) 去掉字符串 s 結束處的空格
?去掉字符串 s 結尾處的空格,這里和上面的記住比較的對稱,L——left(左);R——right(右)
那么有時候,我們再想,要是兩邊都有空字符的話,我們這樣頻繁的嵌套豈不是很麻煩,有沒有一個函數直接解決兩端的空格呢?答案是有!
TRIM(s) 去掉兩端空格
去掉字符串 s 開始和結尾處的空格
MID(s,n,len) 截取字符串
從字符串 s 的 n 位置截取長度為 len 的子字符串,同 SUBSTRING(s,n,len)
注意,這里的索引開始是1,也就是第一個是1,后面代表著取到的字符串長度 ,下面的函數和它的功能也是一樣的。
POSITION(s1 IN s) 從字符串截取s1的開始位置
從字符串 s 中獲取 s1 的開始位置
注意這里和前面的field函數是不一樣的,前面是在字符串列表里面返回第一個列表元素的位置 ,它由多個字符串,而這個只有一個;
我們舉一個詳細的例子:通過field函數,第一個參數使用人事部才能匹配到它的位置,如果使用人事那么就無法匹配到,這也是它的一個局限性
?如果使用position in 字段就可以匹配到,原因和是什么呢,這是因為第一個函數把多個字符串和后面的字符串進行了全面的匹配,是全局匹配
REPLACE(s,s1,s2) 替代函數
將字符串 s2 替代字符串 s 中的字符串 s1,只是改變了顯示,并沒有概念原始的數據集
REVERSE(s) 字符串翻轉
將字符串s的順序反過來
這里的應用場景,可以根據你的業務,涉及到一些偏僻的語法,可能就是我們要考的或者現實中創新的部分
RIGHT(s,n) 返回字符串 s 的后 n 個字符
STRCMP(s1,s2) 字符串比較是否相等
比較字符串 s1 和 s2,如果 s1 與 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1<s2 返回 -1,比較的是長度
?字符串大小寫轉換
日期函數
UNIX_TIMESTAMP() 返回當前的時間戳
返回從1970-01-01 00:00:00到當前毫秒值;至于為什么是從這一年開始的,有興趣的小伙伴可以去搜索一下,為什么選取這一年?
UNIX_TIMESTAMP(DATE_STRING) 解析日期為時間戳
將制定日期轉為毫秒值時間戳
時間戳轉固定的日期格式
FROM_UNIXTIME(BIGINT UNIXTIME[, STRING FORMAT])
將毫秒值時間戳轉為指定格式日期
這個功能有時候可以將一些不規則的數據直接用這一行的代碼,不需要用到Python,學了mysql還是非常的方便的
CURDATE() 返回當前日期
也可以達到這種效果
CURRENT_TIME 返回當前時間
CURRENT_TIMESTAMP() 返回當前日期和時間
DATE() 將字符串日期轉換為標準格式日期
這種方法可以用于格式轉換,有些時候我們的格式不統一,有些是字符串組成的日期,有些本身就是日期格式,為了格式的統一性,我們可以利用該方法進行操作
DATEDIFF(d1,d2) 計算日期相隔天數
計算時間差值
?格式化日期
?加減指定的時間間隔
INTERVAL:操作 后面加正負號 即可變成對應的運算符
EXTRACT(type FROM d) 返回日期的具體數值
LAST_DAY(d) 返回這一月的最后一天
MAKEDATE(year, day-of-year) 構建日期通過天數
其他日期函數
?這些函數,有時候我們可以靈活的運用,可以極大的提高我們的工作效率,特別是前端的展示頁面,我們后臺只需要修改這樣一行代表就可以完成顯示,因為mysql是查詢而不是修改元數據,所以這就是它的優勢。
文末資源推薦
🍓 🍑 🍈 🍌 🍐 🍍 🍠 🍆 🍅 🌽
點擊下方即可下載 ??????????
CDA全套資源練習題及講義資料最新版模擬試題_CDA筆記-講義文檔類資源-CSDN下載
每文一語
加油!!!
總結
以上是生活随笔為你收集整理的MySQL的函数——聚合函数、数学函数、字符串函数、日期函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 子网掩码与prefixLength长度的
- 下一篇: IDEA Tomcat 无法加载mysq