(七)運算符與函數(shù)


1、字符函數(shù)

函數(shù)名稱 | 描述
----|------|----
CONCAT() | 字符連接
CONCAT_WS() | 使用指定的分隔符進行字符連接
FORMAT() | 數(shù)字格式化
LOWER() | 轉換成小寫字母
UPPER() | 轉換成大寫字母
LEFT() | 獲取左側字符
RIGHT() | 獲取右側字符
LENGTH() | 獲取字符串長度
LTRIM() | 刪除前導空格
RTRIM() | 刪除后續(xù)空格
TRIM() | 刪除前導和后續(xù)空格
SUBSTRING() | 字符串截取
[NOT] LIKE() | 模式匹配
REPLACE() | 字符串替換

函數(shù)CONCAT()

創(chuàng)建數(shù)據(jù)表“name”并插入記錄:


查看該表數(shù)據(jù):


要求查詢的結果同時輸出“first_name”與“l(fā)ast_name”:


使用“concat()”連接,并賦予別名:


函數(shù)CONCAT_WS()

函數(shù)CONCAT_WS()要求至少有3個參數(shù),第一個是參數(shù)是指定的分隔符,例如“.”,后續(xù)的參數(shù)是要連接的數(shù)據(jù):

函數(shù)FORMAT()

函數(shù)FORMAT()可以將數(shù)字格式化為字符型,“,”之后的數(shù)字為保留到幾位小數(shù):

函數(shù)LOWER()、UPPER()

函數(shù)LOWER()可以將數(shù)據(jù)轉化為純小寫字母:

函數(shù)UPPER()可以將數(shù)據(jù)轉化為純大寫字母:


函數(shù)LEFT()、RIGHT()

函數(shù)LEFT()參數(shù)中“,”的數(shù)字為從左側獲取幾位字符:

函數(shù)RIGHT()參數(shù)中“,”的數(shù)字為從右側獲取幾位字符,還可以進行函數(shù)的嵌套,將獲取的字符進行小寫轉化:


函數(shù)LENGTH()

函數(shù)LENGTH()可以獲取字符串的長度,注意空格也算在長度之內:

函數(shù)LTRIM()、RTRIM()、TRIM()

函數(shù)LTRIM()可以將第一個字符前的空格刪除:

函數(shù)RTRIM()可以將最后一個字符后的空格刪除:


函數(shù)TRIM()可以將字符前后的空格都刪除:


除此之外,函數(shù)TRIM()還可以刪除特定字符,例如使用“LEADING”刪除前導特定字符:

使用“TRAILING”刪除后續(xù)特定字符:


使用“BOTH”刪除前導及后續(xù)特定字符:


函數(shù)SUBSTRING()

函數(shù)SUBSTRING()可以截取字符串,參數(shù)分別是要截取的內容,從第幾位開始截取,截取幾位;要注意的是MySQL是從1開始,與Java從0開始不同:

如果只注明從第幾位開始截取,那么SUBSTRING()會一直截取到字符串的結尾:

SUBSTRING()的起始位置參數(shù)還可以是負值,代表從末尾開始倒數(shù)的第幾位;但要注意,截取的長度不能是負值,否則結果為空:

函數(shù)[NOT] LIKE()

函數(shù)LIKE()可以模糊匹配,使用通配符“_”或“%”,“_”指任意一個字母;“%”指任意大于0個字母:

查看數(shù)據(jù)表“user”中的詳細記錄:

例如查找姓名第4個字母為“e”的用戶記錄:


每一條“_”代表一位字母
每一條“_”代表一位字母

例如查找姓名中含有字母“o”的用戶記錄:


“%”代表不限制字母數(shù)量
“%”代表不限制字母數(shù)量

查看數(shù)據(jù)表“name”中的詳細記錄:


查詢帶有“%”符號的記錄:


結果出現(xiàn)了未帶有“%”的記錄,原因是系統(tǒng)將3個“%”全部認為是通配符,因此,可以在中間的“%”前加轉義字符“\”,使系統(tǒng)認為其只是普通的“%”符號,沒有特殊意義:


函數(shù)REPLACE()

之前的LTRIM()、RTRIM()、TRIM()只能對字符之前或之后的空格進行處理,而對于字符中間的空格則無能為力,對此可以使用REPLACE()進行替換,其參數(shù)分別是待處理的字符串,要替換的字符,替換后的字符:


而且要替換的字符及替換后的字符數(shù)量并沒有限制:



2、數(shù)值運算符與函數(shù)

數(shù)值運算符即常見的:+、-、x、/等等,這里不做詳細的演示,而函數(shù)如下表所示:

函數(shù)名稱 | 描述
----|------|----
CEIL() | 進一取整
DIV | 整數(shù)除法
FLOOR() | 舍一取整
MOD | 取余數(shù)
POWER() | 冪運算
ROUND() | 四舍五入
TRUNCATE() | 數(shù)字截取

函數(shù)CEIL()、FLOOR()

只要小數(shù)點后有位數(shù),函數(shù)CEIL()就向上取整;而函數(shù)FLOOR()則剛好相反,會向下取整:


函數(shù)DIV

函數(shù)DIV進行整數(shù)除法,結果只保留到整數(shù):


函數(shù)MOD

函數(shù)MOD進行取余數(shù)與取模相同,對于整數(shù)或浮點數(shù)都適用:


函數(shù)POWER()

函數(shù)POWER()即冪運算,例如求2的12次方:


函數(shù)ROUND()

函數(shù)ROUND()就是常見的四舍五入,參數(shù)分別是待處理的數(shù)據(jù)以及要保留幾位小數(shù),例如對3.652分別保留2位、1位以及取整:


函數(shù)TRUNCATE()

函數(shù)TRUNCATE()即數(shù)字截斷,參數(shù)分別是待處理的數(shù)據(jù)以及要保留幾位小數(shù),與ROUND()不同,TRUNCATE()會直接去掉被截斷的數(shù)字,例如對3.652分別保留2位、1位以及取整:


最后的“-1”會在將小數(shù)點后所有位數(shù)都截掉的基礎上,再將小數(shù)點前1位進行清零操作
最后的“-1”會在將小數(shù)點后所有位數(shù)都截掉的基礎上,再將小數(shù)點前1位進行清零操作

3、比較運算符與函數(shù)

函數(shù)名稱 | 描述
----|------|----
[NOT] BETWEEN……AND…… | [不]在……范圍之內
[NOT] IN() | [不]在列出值范圍內
IS [NOT] NULL | [不]為空

函數(shù)[NOT] BETWEEN……AND……

查看數(shù)據(jù)表“user”中的詳細記錄:

查找年齡在14歲至28歲之間的用戶記錄:


函數(shù)[NOT] IN()

函數(shù)[NOT] IN()括號中的內容就是列出值的范圍:


“1”代表TRUE,“0”代表FALSE
“1”代表TRUE,“0”代表FALSE

函數(shù)IS [NOT] NULL

查看數(shù)據(jù)表“name”:


查找姓名為空的記錄:



4、日期時間函數(shù)

函數(shù)名稱 | 描述
----|------|----
NOW() | 當前時間和日期
CURDATE() | 當前日期
CURTIME() | 當前時間
DATE_ADD() | 日期變化
DATEDIFF() | 日期差值
DATE_FORMAT() | 日期格式化

函數(shù)NOW()、CURDATE()、CURTIME()

函數(shù)NOW()返回當前查詢時的日期及時間,而函數(shù)CURDATE()、CURTIME()則是分別顯示日期或時間:


函數(shù)DATE_ADD()

函數(shù)DATE_ADD()可以對日期進行增減,參數(shù)為代修改的日期以及要增減的量,常用的關鍵詞有YEAR、MONTH、WEEK、DAY等:



可用關鍵詞
可用關鍵詞

函數(shù)DATEDIFF()

函數(shù)DATEDIFF()可以計算日期之間差值,例如2016年6月28日距離現(xiàn)在相差多少:


函數(shù)DATE_FORMAT()

函數(shù)DATE_FORMAT()可以轉換日期的格式:


可用說明符
可用說明符

5、信息函數(shù)

函數(shù)名稱 | 描述
----|------|----
CONNECTION_ID() | 連接ID
DATABASE() | 當前數(shù)據(jù)庫
LAST_INSERT_ID() | 最后插入記錄的ID
USER() | 當前用戶
VERSION() | 版本信息

函數(shù)CONNECTION_ID()

函數(shù)CONNECTION_ID()可以返回MySQL服務器的連接數(shù),也就是到目前為止MySQL服務的連接次數(shù),每個連接都有各自唯一的ID:


函數(shù)DATABASE()

函數(shù)DATABASE()顯示當前數(shù)據(jù)庫:


函數(shù)LAST_INSERT_ID()

函數(shù)LAST_INSERT_ID()需要有類似“ID”的自動編號字段:


因此對數(shù)據(jù)表“name”加以改造:


添加一條新記錄,此時“id”編號自增應為5,查詢最后插入記錄的ID,結果確實是5:


如果一次插入多條記錄,那么只會查詢到多條記錄中第一條插入記錄的ID:


函數(shù)USER()、VERSION()

函數(shù)USER()、VERSION()分別顯示登錄的用戶名及MySQL版本信息:



6、聚合函數(shù)

函數(shù)名稱 | 描述
----|------|----
AVG() | 平均值
COUNT() | 計數(shù)
MAX() | 最大值
MIN() | 最小值
SUM() | 求和

聚合函數(shù)都只有一個返回值,下列演示都使用數(shù)據(jù)表“tdb_goods”:


函數(shù)AVG()

求所有商品的平均價格:


還可以使用函數(shù)ROUND()對其進行四舍五入,并保留2為小數(shù):


函數(shù)COUNT()

求商品的總數(shù)量:


函數(shù)MAX()

求最高的商品價格:


函數(shù)MIN()

求最低的商品價格:


函數(shù)SUM()

求所有商品的總價格:



7、加密函數(shù)

函數(shù)名稱 | 描述
----|------|----
MD5() | 信息摘要算法
PASSWORD() | 密碼算法

函數(shù)MD5()

函數(shù)MD5()為計算機安全領域廣泛使用的一種散列函數(shù),用以提供消息的完整性保護:

結果共32位
結果共32位

  如果該數(shù)據(jù)庫中的信息是用于日后的WEB應用,建議都使用MD5進行加密。

函數(shù)PASSWORD()

函數(shù)PASSWORD()更多的用于密碼的計算:


結果共32位
結果共32位

例如修改MySQL用戶的登錄密碼:


驗證原密碼能否登陸:


提示密碼錯誤
提示密碼錯誤

使用修改后的密碼“root”進行登錄:


成功進入MySQL界面
成功進入MySQL界面

8、運算符與函數(shù)匯總:

  • 字符函數(shù)

函數(shù)名稱 | 描述
----|------|----
CONCAT() | 字符連接
CONCAT_WS() | 使用指定的分隔符進行字符連接
FORMAT() | 數(shù)字格式化
LOWER() | 轉換成小寫字母
UPPER() | 轉換成大寫字母
LEFT() | 獲取左側字符
RIGHT() | 獲取右側字符
LENGTH() | 獲取字符串長度
LTRIM() | 刪除前導空格
RTRIM() | 刪除后續(xù)空格
TRIM() | 刪除前導和后續(xù)空格
SUBSTRING() | 字符串截取
[NOT] LIKE() | 模式匹配
REPLACE() | 字符串替換

  • 數(shù)值運算符與函數(shù)

函數(shù)名稱 | 描述
----|------|----
CEIL() | 進一取整
DIV | 整數(shù)除法
FLOOR() | 舍一取整
MOD | 取余數(shù)
POWER() | 冪運算
ROUND() | 四舍五入
TRUNCATE() | 數(shù)字截取

  • 比較運算符與函數(shù)

函數(shù)名稱 | 描述
----|------|----
[NOT] BETWEEN……AND…… | [不]在……范圍之內
[NOT] IN() | [不]在列出值范圍內
IS [NOT] NULL | [不]為空

  • 日期時間函數(shù)

函數(shù)名稱 | 描述
----|------|----
NOW() | 當前時間和日期
CURDATE() | 當前日期
CURTIME() | 當前時間
DATE_ADD() | 日期變化
DATEDIFF() | 日期差值
DATE_FORMAT() | 日期格式化

  • 信息函數(shù)

函數(shù)名稱 | 描述
----|------|----
CONNECTION_ID() | 連接ID
DATABASE() | 當前數(shù)據(jù)庫
LAST_INSERT_ID() | 最后插入記錄的ID
USER() | 當前用戶
VERSION() | 版本信息

  • 聚合函數(shù)

函數(shù)名稱 | 描述
----|------|----
AVG() | 平均值
COUNT() | 計數(shù)
MAX() | 最大值
MIN() | 最小值
SUM() | 求和

  • 加密函數(shù)

函數(shù)名稱 | 描述
----|------|----
MD5() | 信息摘要算法
PASSWORD() | 密碼算法


版權聲明:歡迎轉載,歡迎擴散,但轉載時請標明作者以及原文出處,謝謝合作!             ↓↓↓
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,578評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,701評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,691評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,974評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,694評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,026評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,015評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,193評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,719評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,442評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,668評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,151評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,846評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,255評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,592評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,394評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容