(七)運算符與函數


1、字符函數

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

函數CONCAT()

創建數據表“name”并插入記錄:


查看該表數據:


要求查詢的結果同時輸出“first_name”與“last_name”:


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


函數CONCAT_WS()

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

函數FORMAT()

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

函數LOWER()、UPPER()

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

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


函數LEFT()、RIGHT()

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

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


函數LENGTH()

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

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

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

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


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


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

使用“TRAILING”刪除后續特定字符:


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


函數SUBSTRING()

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

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

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

函數[NOT] LIKE()

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

查看數據表“user”中的詳細記錄:

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


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

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


“%”代表不限制字母數量
“%”代表不限制字母數量

查看數據表“name”中的詳細記錄:


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


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


函數REPLACE()

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


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



2、數值運算符與函數

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

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

函數CEIL()、FLOOR()

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


函數DIV

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


函數MOD

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


函數POWER()

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


函數ROUND()

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


函數TRUNCATE()

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


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

3、比較運算符與函數

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

函數[NOT] BETWEEN……AND……

查看數據表“user”中的詳細記錄:

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


函數[NOT] IN()

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


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

函數IS [NOT] NULL

查看數據表“name”:


查找姓名為空的記錄:



4、日期時間函數

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

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

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


函數DATE_ADD()

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



可用關鍵詞
可用關鍵詞

函數DATEDIFF()

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


函數DATE_FORMAT()

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


可用說明符
可用說明符

5、信息函數

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

函數CONNECTION_ID()

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


函數DATABASE()

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


函數LAST_INSERT_ID()

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


因此對數據表“name”加以改造:


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


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


函數USER()、VERSION()

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



6、聚合函數

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

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


函數AVG()

求所有商品的平均價格:


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


函數COUNT()

求商品的總數量:


函數MAX()

求最高的商品價格:


函數MIN()

求最低的商品價格:


函數SUM()

求所有商品的總價格:



7、加密函數

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

函數MD5()

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

結果共32位
結果共32位

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

函數PASSWORD()

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


結果共32位
結果共32位

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


驗證原密碼能否登陸:


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

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


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

8、運算符與函數匯總:

  • 字符函數

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

  • 數值運算符與函數

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

  • 比較運算符與函數

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

  • 日期時間函數

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

  • 信息函數

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

  • 聚合函數

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

  • 加密函數

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


版權聲明:歡迎轉載,歡迎擴散,但轉載時請標明作者以及原文出處,謝謝合作!             ↓↓↓
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370

推薦閱讀更多精彩內容