MySQL之运算符和函数
MySQL中的函數主要有一下幾類:
?字符函數;數值運算符和函數;比較運算符和函數;日期時間函數;信息函數;聚合函數;加密函數
1、字符函數
1、CONCAT()
root@localhost test>SELECT CONCAT('study','MySQL');可以使用連接符進行輸出,如將study和MySQL之間進行連接,輸出study-MySQL的形式
root@localhost test>select CONCAT('study','-','MySQL');首先創建一個存儲名字的數據表
root@localhost test>create table name(-> first_name varchar(20),-> last_name varchar(20)-> ); root@localhost test>insert name(first_name,last_name) VALUES ('Tom','.J'),('Jam','.L'),('KoBe','.H');現在為了獲取完整的名字信息,將上述的名字信息輸出,可使用CONCAT命令進行輸出
root@localhost test>select CONCAT(first_name,last_name) AS full_name FROM name;2、CONCAT_WS()
而CONCAT_WS指定連接符,第一個參數為連接符,第二個參數為需要連接的參數1,第三個參數為需要連接的參數2,以此類推
root@localhost test>select CONCAT_WS('|','A','B','C');3、FORMAT()
FORMAT進行數字字符化,之所以把這個函數歸結到字符函數中,是因為其返回結果是一個字符型
root@localhost test>select FORMAT(12560.75456,2);而如果想保留到整數位,則將‘2’對應的參數位置變成0即可
root@localhost test>select FORMAT(12560.75456,0);4、UPPER/LOWER
大小寫轉換,分別是將大寫字母轉換成小寫字母;把消息字母轉換成大寫字母
root@localhost test>select UPPER('mysql'); root@localhost test>select LOWER('MYSQL');5、LEFT/RIGHT
從字符串的左側開始獲取;或者從字符串的右側開始獲取,有兩個參數
root@localhost test>select LEFT('study-MySQL',5); root@localhost test>select RIGHT('study-MySQL',5);同時使用LOWER和RIGHT函數
root@localhost test>select LOWER(RIGHT('study-MySQL',5));當然還有幾個函數
此外TRIM函數還有別的用法
root@localhost test>select TRIM(LEADING '?' FROM '??study-MySQL???');表示刪除字符串中的前導的“?”字符,使用關鍵字LEADING
表示刪除字符串中的后續的“?”字符,使用關鍵字TRAILING
刪除前導和后續所有的?字符,使用關鍵字BOTH
root@localhost test>select TRIM(BOTH '?' FROM '??study-MySQL???');對于??study??MySQL??中間的?如何處理呢?通過使用replace進行替換
root@localhost test>select REPLACE('??My??SQL???','?','');在替換的時候不是說一個字符只能替換一個字符,可以是一對多,如:
root@localhost test>select REPLACE('??My??SQL???','?','!!');將一個?替換成2個!如上所示。也可以是多對一,如將兩個?換成一個!,如:
root@localhost test>select REPLACE('??My??SQL???','??','!');因為右邊有三個?,因此只能替換兩個?,還有一個?成單了,無法替換
對于SUBSTRING是進行字符串的截取,有三個參數,分別是從哪個字符串中截取,從第幾位開始截取,以及截取幾個參數
root@localhost test>select SUBSTRING('study-MySQL',7,5);substring(str, pos); substring(str, pos, len)
在字符串study-MySQL中從第7位開始截取,截取5個,注意這里與程序中不同,其下標是從1開始的。
如果只寫如兩個參數,如下表示從這一位開始一直截取到字符串的結尾
root@localhost test>select SUBSTRING('study-MySQL',7); root@localhost test>select SUBSTRING('study-MySQL',-5,5);從字符串的倒數第5位開始,共截取5個字符
root@localhost test>select SUBSTRING('study-MySQL',-5);從字符串的倒數第5位開始,一直截取到結束
對于LIKE和NOT LIKE的匹配與否的問題
root@localhost test>select 'MySQL' like 'M%';%這里表示0個或者多個字符
這里的“1”表示 true,但這里沒有體現LIKE的強大功能,現在在數據表name中插入一個記錄
root@localhost test>insert name VALUES ('JJ%','.M');現在想找到名字中包含 J 的記錄,可以如下:
root@localhost test>select * from name WHERE first_name LIKE '%J%';那如果想找到名字中包含%就應該
root@localhost test>select * from name WHERE first_name LIKE '%%%';第一個和最后一個%表示任意字符,中間的%表示需要查找的字符,但是這樣MySQL認為這三個都是通配符,因此會找出所有記錄,那如何解決呢?
root@localhost test>select * from name WHERE first_name LIKE '%1%%' ESCAPE 1;告訴系統1后面的這個字符不需要再進行解析,直接認為是標準的%字符就可以了,這里不一定非要為1,只要是數字就可以
另外 “_”匹配的是任意一個字符,“%”匹配的是任意個字符。
2、數值運算符和函數
root@localhost test>select CEIL(3.01); 向上取整,為4 root@localhost test>select FLOOR(3.99); 向下取整,為3 root@localhost test>select 3/4; 普通除法,為0.75 root@localhost test>select 3 DIV 4; 整數除法,向下取整 root@localhost test>select 5 MOD 3; 取余,等價于%取余操作 root@localhost test>select 5.2 MOD 3; 取余位2.2 root@localhost test>select 5 % 3; root@localhost test>select POWER(2,3); 冪運算,2的3次方 root@localhost test>select ROUND(3.642,2); 保留2位,為3.64 root@localhost test>select ROUND(3.642,1); 保留1位,為3.6 root@localhost test>select ROUND(3.642,0); 只保留到整數,為3.7 root@localhost test>select TRUNCATE(125.89,2);只保留2位,為125.89 root@localhost test>select TRUNCATE(125.89,1);只保留1位,為125.8 root@localhost test>select TRUNCATE(125.89,0);只保留0位,為125 root@localhost test>select TRUNCATE(125.89,-1);為1203、比較運算符和函數
root@localhost test>select 15 BETWEEN 10 AND 20; root@localhost test>select 5 IN(2,3,5,7,9);判斷5在不在序列范圍之間,在的話輸出為1
查看first_name中為空的記錄
4、日期時間函數
root@localhost test>select NOW(); 顯示當前時間 root@localhost test>select DATE_ADD('2014-3-13',INTERVAL 365 DAY ); 2015-03-13 root@localhost test>select DATE_ADD('2014-3-13',INTERVAL 1 YEAR ); 2015-03-13 root@localhost test>select DATE_ADD('2014-3-13',INTERVAL -365 DAY ); 2013-03-13 root@localhost test>select DATE_ADD('2014-3-13',INTERVAL 3 WEEK); 2013-03-13 root@localhost test>select DATEDIFF('2014-3-6','2014-4-2'); 日期差值運算為-27 root@localhost test>select DATE_FORMAT('2014-4-17','%m/%d/%Y');日期輸出為04/17/20145、信息函數
而對于LAST_INSERT_ID,在數據表name中沒有id字段,如果要得到last_insert_id必須在數據表中存在一個自動編號的字段
現在新寫入的記錄的ID為6,如果想要通過函數得到這個id可以用:
root@localhost test>select LAST_INSERT_ID();如果同時寫入多條記錄呢,那只會返回第一條記錄對應的id
root@localhost test>INSERT name(first_name,last_name) VALUES ('KKK','.JJJ'),('AAA','.BBB'); root@localhost test>select USER(); 當前登錄用戶 root@localhost test>SELECT VERSION();當前版本信息6、聚合函數
聚合函數的一個特點是只有一個返回值
root@localhost test>select avg(goods_price) AS avg_price FROM goods;計算數據表goods中的平均價格,保留到小數點后的兩位
root@localhost test>select ROUND(AVG(goods_price),2) AS avg_price FROM goods; root@localhost test>select COUNT(goods_id) AS coutsID FROM goods; root@localhost test>select MAX(goods_price) AS coutsID FROM goods; root@localhost test>select MIN(goods_price) AS coutsID FROM goods; root@localhost test>select SUM(goods_price) AS coutsID FROM goods;6、加密函數
可以對任何一個信息進行MD5的加密,加密后的結果是一個32的數字
root@localhost test>select MD5('admin');而PASSWORD是進行密碼的計算
root@localhost test>select PASSWORD('admin');如果MySQL中是為了以后的Web頁面做準備,盡量使用MD5,而PASSWORD是為了修改客戶端密碼
root@localhost test>select PASSWORD = PASSWORD('delimater');將登陸密碼修改為 delimater,退出后再次登陸即可生效。總結
以上是生活随笔為你收集整理的MySQL之运算符和函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL之无限级分类表设计
- 下一篇: MySQL之alter和upate