MySQL函式
常用函式
官方檔案 : https://dev.mysql.com/doc/refman/5.7/en/func-op-summary-ref.html
資料函式
SELECT ABS(-8); /*絕對值*/
SELECT CEILING(9.4); /*向上取整*/
SELECT FLOOR(9.4); /*向下取整*/
SELECT RAND(); /*亂數,回傳一個0-1之間的亂數*/
SELECT SIGN(0); /*符號函式: 負數回傳-1,正數回傳1,0回傳0*/
字串函式
SELECT CHAR_LENGTH('今天天氣真好'); /*回傳字串包含的字符數*/
SELECT CONCAT('我','愛','程式'); /*合并字串,引數可以有多個*/
SELECT INSERT('我愛編程helloworld',1,2,'超級熱愛'); /*替換字串,從某個位置開始替
換某個長度*/
SELECT LOWER('dgDSssssa'); /*小寫*/
SELECT UPPER('aassfdf'); /*大寫*/
SELECT LEFT('hello,world',5); /*從左邊截取*/
SELECT RIGHT('hello,world',5); /*從右邊截取*/
SELECT REPLACE('堅持就能成功','堅持','努力'); /*替換字串*/
SELECT SUBSTR('堅持就能成功',4,6); /*截取字串,開始和長度*/
SELECT REVERSE('堅持就能成功'); /*反轉
日期和時間函式
SELECT CURRENT_DATE(); /*獲取當前日期*/
SELECT CURDATE(); /*獲取當前日期*/
SELECT NOW(); /*獲取當前日期和時間*/
SELECT LOCALTIME(); /*獲取當前日期和時間*/
SELECT SYSDATE(); /*獲取當前日期和時間*/
-- 獲取年月日,時分秒
SELECT YEAR(NOW());
SELECT MONTH(NOW());
SELECT DAY(NOW());
SELECT HOUR(NOW());
SELECT MINUTE(NOW());
SELECT SECOND(NOW());
系統資訊函式
SELECT VERSION(); /*版本*/
SELECT USER(); /*用戶*/
聚合函式
| 函式名稱 | 描述 |
|---|---|
| COUNT() | 回傳滿足Select條件的記錄總和數,如 select count(*) 【不建議使用 *,效率低】 |
| SUM() | 回傳數字欄位或運算式列作統計,回傳一列的總和, |
| AVG() | 通常為數值欄位或表達列作統計,回傳一列的平均值 |
| MAX() | 可以為數值欄位,字符欄位或運算式列作統計,回傳最大的值, |
| MIN() | 可以為數值欄位,字符欄位或運算式列作統計,回傳最小的值, |
/*COUNT:非空的*/
SELECT COUNT(studentname) FROM student;
SELECT COUNT(*) FROM student;
SELECT COUNT(1) FROM student; /*推薦*/
從含義上講,count(1)與 count(*) 都表示對全部資料行的查詢,
count(欄位)會統計該欄位在表中出現的次數,忽略欄位為null 的情況,即不統計欄位為null的記錄,count(*)包括了所有的列,相當于行數,在統計結果的時候,包含欄位為null 的記錄count(1)用1代表代碼行,在統計結果的時候,包含欄位為null 的記錄 ,
很多人認為count(1)執行的效率會比count(*)高,原因是count(*)會存在全表掃描,而count(1)可以針對一個欄位進行查詢,其實不然,count(1)和count(*)都會對全表進行掃描,統計所有記錄的條數,包括那些為null的記錄,因此,它們的效率可以說是相差無幾,而count(欄位)則與前兩者不同,它會統計該欄位不為null的記錄條數,
- 在表沒有主鍵時,count(1)比count(*)快
- 有主鍵時,主鍵作為計算條件,count(主鍵)效率最高;
- 若表格只有一個欄位,則count(*)效率較高,
MD5 加密
MD5即Message-Digest Algorithm 5(資訊-摘要演算法5),用于確保資訊傳輸完整一致,是計算機廣泛使用的雜湊演算法之一(又譯摘要演算法、哈希演算法),主流編程語言普遍已有MD5實作,將資料(如漢字)運算為另一固定長度值,是雜湊演算法的基礎原理,MD5的前身有MD2、MD3和MD4,
實作資料加密
CREATE TABLE `testmd5` (
`id` INT(4) NOT NULL,
`name` VARCHAR(20) NOT NULL,
`pwd` VARCHAR(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO testmd5 VALUES(1,'xiao','123456'),(2,'ming','456789')
有如上資料,現在我們對其所有密碼加密
update testmd5 set pwd = md5(pwd);
如果單獨對某個用戶的密碼進行加密
INSERT INTO testmd5 VALUES(3,'hong','123456')
update testmd5 set pwd = md5(pwd) where name = 'hong';
也可以在插入資料的時候直接加密
INSERT INTO testmd5 VALUES(4,'gang',md5('123456'));
如果要做登錄判斷,可以直接對加密后的密碼進行比對即可,
SELECT * FROM testmd5 WHERE `name`='gang' AND pwd=MD5('123456');
小結
-- 數值函式
abs(x) -- 絕對值 abs(-10.9) = 10
format(x, d) -- 格式化千分位數值 format(1234567.456, 2) = 1,234,567.46
ceil(x) -- 向上取整 ceil(10.1) = 11
floor(x) -- 向下取整 floor (10.1) = 10
round(x) -- 四舍五入去整
mod(m, n) -- m%n m mod n 求余 10%3=1
pi() -- 獲得圓周率
pow(m, n) -- m^n
sqrt(x) -- 算術平方根
rand() -- 亂數
truncate(x, d) -- 截取d位小數
-- 時間日期函式
now(), current_timestamp(); -- 當前日期時間
current_date(); -- 當前日期
current_time(); -- 當前時間
date('yyyy-mm-dd hh:ii:ss'); -- 獲取日期部分
time('yyyy-mm-dd hh:ii:ss'); -- 獲取時間部分
date_format('yyyy-mm-dd hh:ii:ss', '%d %y %a %d %m %b %j'); -- 格式化時間
unix_timestamp(); -- 獲得unix時間戳
from_unixtime(); -- 從時間戳獲得時間
-- 字串函式
length(string) -- string長度,位元組
char_length(string) -- string的字符個數
substring(str, position [,length]) -- 從str的position開始,取length個字符
replace(str ,search_str ,replace_str) -- 在str中用replace_str替換search_str
instr(string ,substring) -- 回傳substring首次在string中出現的位置
concat(string [,...]) -- 連接字串
charset(str) -- 回傳字串字符集
lcase(string) -- 轉換成小寫
left(string, length) -- 從string2中的左邊起取length個字符
load_file(file_name) -- 從檔案讀取內容
locate(substring, string [,start_position]) -- 同instr,但可指定開始位置
lpad(string, length, pad) -- 重復用pad加在string開頭,直到字串長度為length
ltrim(string) -- 去除前端空格
repeat(string, count) -- 重復count次
rpad(string, length, pad) --在str后用pad補充,直到長度為length
rtrim(string) -- 去除后端空格
strcmp(string1 ,string2) -- 逐字符比較兩字串大小
-- 聚合函式
count()
sum();
max();
min();
avg();
group_concat()
-- 其他常用函式
md5();
default();
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/261696.html
標籤:MySQL
