MySQL的常用函數(shù),你學(xué)會(huì)幾個(gè)?
在開(kāi)發(fā)中,數(shù)據(jù)庫(kù)的種類(lèi)千奇百怪,有各種,比如早期的 SQLServer,Mysql,Oracle,現(xiàn)在還有許多國(guó)產(chǎn)的數(shù)據(jù)庫(kù),但是有不少開(kāi)發(fā)還是使用的 Mysql,但是對(duì)于 Mysql 中的各種各樣的函數(shù),用的卻是沒(méi)有那么多的,今天了不起就來(lái)帶著大家一起看看這個(gè) Mysql 的各種常用的函數(shù)。
Mysql 的日期函數(shù)
DATE_FORMAT(date,format)
按照指定的格式,格式化日期,我們來(lái)使用一下:
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s');
一般我們使用的時(shí)候,都是經(jīng)常在條件中使用的這個(gè)比如:
where DATE_FORMAT(createTime,'%Y-%m-%d') = '2020-11-11'
而且我們也可以對(duì)他進(jìn)行分組比如:
GROUP BY DATE_FORMAT(createTime,'%H');
這樣的分組條件就是小時(shí),每小時(shí)有多少數(shù)據(jù),如果是每天,則換成 %d
就可以了
STR_TO_DATE(str,format)
這個(gè)則是把我們這個(gè)字符串轉(zhuǎn)為日期
比如下面這樣的:
SELECT STR_TO_DATE('2023-11-21','%Y-%m-%d');
YEAR()
MONTH()
DAY()
SELECT YEAR(NOW());
SELECT MONTH(NOW());
SELECT DAY(NOW())
參數(shù)我們傳入日期,最后給我們返回的就是我們想要的年月日的信息。
DAYOFYEAR(date)
這個(gè)函數(shù)幾乎很少用,是用來(lái)表示,當(dāng)前日期是今年的第幾天
SELECT DAYOFYEAR(NOW());
333
其實(shí)在開(kāi)發(fā)過(guò)程中,我們用到的日期函數(shù)并不會(huì)很多,我們用到的關(guān)于這個(gè)字符串函數(shù),才是最多的。
字符串函數(shù)
CHAR_LENGTH(str)
CHARACTER_LENGTH(str)
這兩個(gè)函數(shù)都是用來(lái)返回字符串的字符數(shù)的:
select CHAR_LENGTH("hello");
select CHARACTER_LENGTH('hello');
結(jié)果:5
CONCAT(str1,str2,...)
CONCAT_WS(separator,str1,str2,...)
第一個(gè)就是多個(gè)字符串合并成一個(gè)字符串,第二個(gè)的意思則是,再中間可以拼接一段內(nèi)容,或者理解為用中間的內(nèi)容隔開(kāi)。
這個(gè)幾乎是我們經(jīng)常用的函數(shù),用來(lái)做兩個(gè)字段的合并等等操作
SELECT CONCAT('hello','world');
helloworld
SELECT CONCAT_WS(',','hello','world');
hello,world
FIELD(str,str1,str2,str3,...)
返回第一個(gè)字符串再字符串列表的位置:
SELECT FIELD('x','d','c','x');
3
TRIM(' xxxx ')
這個(gè)也是我們?cè)陂_(kāi)發(fā)的時(shí)候經(jīng)常會(huì)用到,但是在數(shù)據(jù)庫(kù)層面其實(shí)很少用到,最多的還是在 Java 代碼里面去除空格使用,再數(shù)據(jù)庫(kù)中,含義也是一樣的,都是用來(lái)去除字符串開(kāi)始和結(jié)尾的空格。
這個(gè)時(shí)候就有人想問(wèn)了,如果我只想去掉開(kāi)頭的,或者只想去掉結(jié)尾的空格怎么辦?
LTRIM(str)
RTRIM(str)
第一個(gè)是去掉開(kāi)始的空格,第二個(gè)是去掉結(jié)尾的空格,這個(gè)了不起都不用給大家演示,一個(gè)是去掉左邊的,一個(gè)是去掉右邊的, 沒(méi)有R 沒(méi)有L 的 則是兩邊都去掉。
UCASE(str)
UPPER(str)
這兩個(gè)函數(shù)效果是一樣的,轉(zhuǎn)換字符串字符為大寫(xiě),既然有大寫(xiě),那么就勢(shì)必會(huì)有小寫(xiě)
LCASE(str)
LOWER(str)
上述兩個(gè)方法是吧字符串轉(zhuǎn)為小寫(xiě)
**REPLACE() **
將字符串中出現(xiàn)的所有子字符串替換為新的子字符串
REVERSE()
這個(gè)函數(shù)就比較有意思了,把字符串給翻轉(zhuǎn)過(guò)來(lái),但是這個(gè)函數(shù)不是屬于常用的函數(shù),了不起實(shí)在是想不出什么需求,需要吧這個(gè)字符串給你倒過(guò)來(lái),難道還想倒背如流?
聚合函數(shù)
在MySQL中,聚合函數(shù)主要由:count,sum,min,max,avg,這些聚合函數(shù)我們之前都學(xué)過(guò),不再重復(fù)。這里我們學(xué)習(xí)另外一個(gè)函數(shù):group_concat(),該函數(shù)用戶(hù)實(shí)現(xiàn)行的合并。
group_concat()函數(shù)首先根據(jù)group by指定的列進(jìn)行分組,并且用分隔符分隔,將同一個(gè)分組中的值連接起來(lái),返回一個(gè)字符串結(jié)果。
group_concat([distinct] 字段名 [order by 排序字段 asc/desc] [separator '分隔符'])
注意:
- 使用distinct可以排除重復(fù)值;
- 如果需要對(duì)結(jié)果中的值進(jìn)行排序,可以使用order by子句;
- separator是一個(gè)字符串值,默認(rèn)為逗號(hào)。
數(shù)學(xué)函數(shù)
round(x,保留位數(shù))函數(shù)
四舍五入; 當(dāng)對(duì)正數(shù)進(jìn)行四舍五入:按照正常的計(jì)算方式,四舍五入即可。當(dāng)對(duì)負(fù)數(shù)進(jìn)行四舍五入:先把符號(hào)丟到一邊,對(duì)去掉負(fù)號(hào)后的正數(shù)進(jìn)行四舍五入,完成以后,再把這個(gè)負(fù)號(hào),補(bǔ)上即可。
select round(1.595658,3) as out_put;
ceil(x)函數(shù)
向上取整,返回>=該參數(shù)的最小整數(shù)。求的是大于等于這個(gè)數(shù)字的最小整數(shù)
select ceil(1.9) as out_put;
select ceil(1.1) as out_put;
至于數(shù)學(xué)函數(shù)中的 avg 和 sum 了不起都不用說(shuō)了,一個(gè)平均數(shù),一個(gè)求和,