場景
基礎知識回顧:mysql中常用函數的使用示例。
注:
博客:
霸道流氓氣質-CSDN博客
實現
數學函數
-- ABS(x)返回x的絕對值
SELECT ABS(-1),ABS(2);
-- PI()返回圓周率
SELECT PI();
-- SQRT(x)返回非負數x的二次方根
SELECT SQRT(4);
-- MOD(x,y)返回x被y除之后的余數
SELECT MOD(10,3);
-- CEIL(X) CEILING(X)返回不小于x的最小整數值,返回值轉化為一個BIGINT
SELECT CEIL(3.5),CEILING(2.22);
-- FLOOR(X)返回不大于x的最大整數值,返回值轉化為一個BIGINT
SELECT FLOOR(3.5);
-- RAND()返回一個隨機浮點數v,0<=v<=1
SELECT RAND();
-- RAND(X)返回一個隨機浮點值v,0<=v<=1。參數x為整數,被用作種子值,用來產生重復序列
SELECT RAND(1);
-- ROUND(X)返回最接近于參數x的整數,對x值進行四舍五入
SELECT ROUND(3.4);
-- ROUND(X,Y)返回最接近于參數x的值,此值保留到小數點的后面的y位
SELECT ROUND(3.564,2);
-- TRUNCATE(X,Y)返回截去小數點后y位的數值x
SELECT TRUNCATE(3.2565,3);
-- SIGN(X)返回參數x的符號
SELECT SIGN(10),SIGN(-10);
-- POW(X,Y) POWER(X,Y)返回x的y次方
SELECT POW(2,3),POWER(3,2);
-- EXP(X)返回e的x次方
SELECT EXP(2);
-- LOG(X)返回x的自然對數,x相對于基數e的對數
SELECT LOG(8);
-- LOG10(X)返回x的基數為10的對數
SELECT LOG10(10);
-- RADIANS(X)返回參數x由角度轉化為弧度的值
SELECT RADIANS(90);
-- DEGREES(X)返回參數x由弧度轉化為角度的值
SELECT DEGREES(180);
-- SIN(X)返回x的正弦值
SELECT SIN(3);
-- ASIN(X)返回x的反正弦,即正弦為x的值
SELECT ASIN(0.1411);
-- COS(X)返回x的余弦值
SELECT COS(5);
-- ACOS(X)返回參數x的反余弦,即余弦為x的值
SELECT ACOS(0.14);
-- TAN(X)返回x的正切值
SELECT TAN(10);
-- COT(X)返回x的余切值
SELECT COT(10);
字符串函數
-- CHAR_LENGTH(str)計算字符串字符數函數,返回str中包含的字符個數
SELECT CHAR_LENGTH('BADAO')
-- LENGTH(str)計算字符串長度函數,返回字符串的字節長度
SELECT LENGTH('BADAO')
-- CONCAT(str1,str2,...)合并字符串函數,參數可以是一個或多個
SELECT CONCAT('BADAO','DE','CHENGXVYUAN');
-- CONCAT_WS(separator,str1,str2,...)此函數代表CONCAT With Separator,是CONCAT()的特殊形式
SELECT CONCAT_WS('-','BADAO','DE');
-- INSERT(str,pos,len,newstr)替換字符串函數,返回字符串str,在位置pos起始的len個字符長的子串由字符串newstr代替
SELECT INSERT('BADAODECHENGXVYUAN',3,3,'BA');
-- LOWER(str) LCASE(str)將字符串中的字母轉換為小寫
SELECT LOWER('BADAO'),LCASE('DE');
-- UPPER(str) UCASE(str)將字符串中的字母轉換成大寫
SELECT UPPER('badao'),UCASE('de');
-- LEFT(str,len)截取左側字符串函數,返回str的最左邊len個字符
SELECT LEFT('BADAODE',5);
-- RIGHT(str,len)截取右側字符串函數,返回str的最右邊len個字符
SELECT RIGHT('BADAODE',2);
-- LPAD(str,len,padstr)填充左側字符串函數,返回字符串str的左邊由字符串padstr填補到滿足len個字符長度
SELECT LPAD('BADAO',7,'-');
-- RPAD(str,len,padstr)填充右側字符串函數,返回字符串str的右邊由字符串padstr填補到滿足len個字符長度
SELECT RPAD('BADAO',7,'-');
-- LTRIM(str)刪除字符串左側空格函數
SELECT LTRIM(' BADAO ');
-- RTRIM(str)刪除字符串右側空格函數
SELECT RTRIM(' BADAO ');
-- TRIM(str)刪除字符串左右兩側空格函數
SELECT TRIM(' BADAO ');
-- TRIM(s1 from str)刪除指定字符串函數,用于刪除字符串str中兩端包含的子字符串s1
SELECT TRIM('A' FROM 'ABADAOAA');
-- REPEAT(str,count)重復生成字符串函數,返回一個由重復的字符串str組成的字符串,該字符串中str的重復次數是count
SELECT REPEAT('BA',2);
-- SPACE(N)空格函數,返回一個由n個空格組成的字符串
SELECT SPACE(2);
-- REPLACE(str,from_str,to_str)替換函數,使用字符串to_str替換字符串str中所有的子字符串from_str
SELECT REPLACE('BADAODECHENGXVYUANBABA','BA','BB');
-- STRCMP(expr1,expr2)比較字符串大小函數
SELECT STRCMP('12','123'),STRCMP('123','12');
-- SUBSTRING(str,pos,len) MID(str,pos,len)都是獲取子字符串的函數,從字符串str中獲取一個長度為len的子字符串,起始位置是pos,此函數的len可以省略
SELECT SUBSTR('BADAODE',3,3);
-- LOCATE(substr,str)匹配子字符串中開始位置的函數,返回子字符串substr在字符串str中第一次出現的位置
SELECT LOCATE('DAO','BADAO');
-- POSITION(substr IN str)匹配子字符串開始位置的函數,功能同LOCATE函數,返回子字符串substr在str中的開始位置
SELECT POSITION('DAO' IN 'BADAO');
-- INSTR(str,substr)匹配子字符串開始位置的函數,功能同上面兩個函數
SELECT INSTR('BADAO','DAO');
-- REVERSE(str)字符串逆序函數
SELECT REVERSE('BADAO');
-- ELT(N,str1,str2,str3,...)返回指定位置的字符串函數,根據n的取值返回指定的字符串sn
SELECT ELT(2,'BADAO','DEE','CHENGXV');
-- FIELD(str,str1,str2,str3,...)返回指定字符串位置的函數,用于返回字符串str在列表str1、str2等中第一次出現的位置,如果找不到則返回0
SELECT FIELD('A','BDO','DEA','CHENGXVYUAN','A');
-- FIND_IN_SET(str,strlist)返回子字符串位置的函數,用于返回字符串str在字符串列表strlist中出現的位置
SELECT FIND_IN_SET('A','A,B,C');
-- MAKE_SET(bits,str1,str2,...)選取字符串的函數,用于返回一個設定值(一個包含被逗號分開的子字符串的字符串),由在bits組中具有相應位的字符串組成
SELECT MAKE_SET(2,'A','B','C');
日期和時間函數
-- CURDATE() CURRENT_DATE()返回當前系統的日期值
SELECT CURDATE(),CURRENT_DATE();
-- CURTIME() CURRENT_TIME()返回當前系統的時間值
SELECT CURTIME(),CURRENT_TIME();
-- CURRENT_TIMESTAMP() LOCALTIME() NOW() SYSDATE()這四個函數作用相同,都是返回當前系統的日期和時間值
SELECT CURRENT_TIMESTAMP(),LOCALTIME(),NOW(),SYSDATE();
-- UNIX_TIMESTAMP(date)UNIX時間戳函數,返回一個以UNIX時間戳為基礎的無符號整數
SELECT UNIX_TIMESTAMP();
-- FROM_UNIXTIME(unix_timestamp)把UNIX時間戳轉換為時間格式的函數,與UNIX_TIMESTAMP互為反函數
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP());
-- UTC_DATE()返回UTC日期函數,用于返回當前UTC(世界標準時間)的日期值。由于時差關系,UTC不一定是當前計算機系統顯示的日期值。
SELECT UTC_DATE();
-- UTC_TIME()返回UTC時間函數,用于返回當前UTC(世界標準時間)的時間值。由于時差關系,UTC不一定是當前計算機系統顯示的時間值。
SELECT UTC_TIME();
-- MONTH(date) MONTHNAME(date)獲取日期參數date中的月份的函數,MONTH(date)返回數值類型,MONTHNAME(date返回字符串類型
SELECT MONTH(CURRENT_DATE()),MONTHNAME(CURRENT_DATE());
-- DAYNAME(date)獲取星期的函數,返回日期date對應的星期幾的英文名稱
SELECT DAYNAME(CURRENT_DATE());
-- DAYOFWEEK(date)獲取星期的函數,返回日期date對應的一周的索引位置值
SELECT DAYOFWEEK(CURRENT_DATE());
-- WEEK(date)獲取星期的函數,返回日期date對應的工作日索引
SELECT WEEK(CURRENT_DATE());
-- WEEK(date,mode)獲取星期數的函數,返回日期參數date在一年中位于第幾周。該函數允許指定星期是否起始于周日或者周一,以及返回值的范圍是否為0-53或1到53,如果mode參數別省略,
-- 則使用系統自變量default_week_format,默認情況下,default_week_format的默認值為0
SELECT WEEK(CURRENT_DATE(),1),WEEK(CURRENT_DATE(),2);
-- WEEKOFYEAR(date)計算日期參數date是一年中的第幾個星期,范圍是1-53,相當于WEEK(date,53)
SELECT WEEKOFYEAR(CURRENT_DATE());
-- DAYOFYEAR(date)獲取天數的函數,返回日期參數date是一年中的第幾天,范圍是1-366
SELECT DAYOFYEAR(CURRENT_DATE());
-- DAYOFMONTH(date)獲取天數的函數,返回日期參數date是一個月中的第幾天,范圍是1-31
SELECT DAYOFMONTH(CURRENT_DATE());
-- YEAR(date)獲取年份的函數,返回日期參數date對應的年份,范圍是1970-2069
SELECT YEAR(CURRENT_DATE());
-- QUARTER(date)返回日期參數對應一年中的季度值,范圍1-4
SELECT QUARTER(CURRENT_DATE());
-- MINUTE(time)返回時間參數對應的分鐘數,范圍0-59
SELECT MINUTE(CURRENT_TIME());
-- SECOND(time)返回時間參數對應的秒數,范圍0-59
SELECT SECOND(CURRENT_TIME);
-- EXTRACT(unit FROM date)獲取日期時間參數對應的指定類型的函數
SELECT EXTRACT(YEAR FROM CURRENT_DATE),EXTRACT(MONTH FROM CURRENT_DATE);
-- TIME_TO_SEC(time)時間和秒數轉換的函數,返回將時間參數time轉換為秒數的時間值
SELECT TIME_TO_SEC(CURRENT_TIME);
-- SEC_TO_TIME(seconds)秒數和時間轉換的函數,返回將seconds轉換為小時、分鐘和秒數的時間值
SELECT SEC_TO_TIME(6400);
-- DATE_ADD(date,INTERVAL expr unit) ADDDATE(date,INTERVAL expr unit)加法計算日期函數,返回一個以參數date為起始日期加上時間間隔值之后的日期值,
-- 其中expr是一個字符串,可以是以負號開頭的負值時間間隔,type指出了expr被解釋的方式
SELECT DATE_ADD(CURRENT_DATE,INTERVAL 7 DAY);
-- DATE_SUB(date,INTERVAL expr unit) SUBDATE(date,INTERVAL expr unit)減法計算日期函數,返回一個以參數date為起始日期減去時間間隔值
-- 之后的日期值
SELECT DATE_SUB(CURRENT_DATE,INTERVAL 7 DAY);
-- ADDTIME(time,expr)加法計算時間值函數,返回將expr值加上原始時間time之后的值
SELECT ADDTIME(CURRENT_TIME,'00:30:00');
-- SUBTIME(time,expr2)減法計算時間值函數,返回將原始時間time減去expr值之后的值
SELECT SUBTIME(CURRENT_TIME,'00:30:00');
-- DATEDIFF(expr1,expr2)計算兩個日期時間間隔的函數,返回參數expr1減去expr2之后的值
SELECT DATEDIFF(DATE_ADD(CURRENT_DATE,INTERVAL 7 DAY),CURRENT_DATE);
-- DATE_FORMAT(date,format)將日期和時間格式化的函數,返回根據參數format指定的格式顯示的date值
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s');
-- TIME_FORMAT(time,format)將時間格式化的函數
SELECT TIME_FORMAT(CURRENT_TIME,'%H:%i:%s')
-- GET_FORMAT({DATE|TIME|DATETIME}, {'EUR'|'USA'|'JIS'|'ISO'|'INTERNAL'})
-- 獲得國家地區時間格式函數,返回值是一個格式字符串,傳參選項從上面選擇
SELECT GET_FORMAT(DATE,'USA');
SELECT GET_FORMAT(DATETIME,'JIS');
條件判斷函數
-- IF(expr1,expr2,expr3)返回表達式expr1得到不用運算結果時對應的值。若expr是TRUE,則返回expr2,否則返回expr3
SELECT IF(1>=0,1,0);
-- IFNULL(expr1,expr2)返回參數expr1或expr2的值,如果expr1不為NULL,則返回expr1,否則返回expr2
SELECT IFNULL(NULL,'AAA'),IFNULL('BBB','CCC');
-- CASE 函數,根據expr的取值返回相應值
?SELECT
?CASE
???WEEKDAY(
???NOW())
???WHEN 0 THEN
???'星期一'
???WHEN 1 THEN
???'星期二'
???WHEN 2 THEN
???'星期三'
???WHEN 3 THEN
???'星期四'
???WHEN 4 THEN
???'星期五'
???WHEN 5 THEN
???'星期六' ELSE '星期天'
??END AS column1;
系統信息函數
-- VERSION()返回當前Mysql版本號的字符串
SELECT VERSION();
-- CONNECTION_ID()返回mysql服務器當前用戶的連接次數
SELECT CONNECTION_ID();
-- PROCESSLIST 使用"SHOW PROCESSLIST"顯示正在運行的線程,不僅可以查看當前所有的連接數,還可以查看當前的連接狀態,幫助用戶
-- 識別出有問題的查詢語句等。如果是root賬戶,能看到所有用戶的當前連接,如果是普通賬號,只能看到自己占用的連接
SHOW PROCESSLIST;
-- DATABASE() SCHEMA()顯示目前正在使用的數據庫名稱
SELECT DATABASE(),SCHEMA();
-- USER() CURRENT_USER() SYSTEM_USER() SESSION_USER()都是獲取當前登錄用戶名的函數。
SELECT USER(),CURRENT_USER(),SYSTEM_USER(),SESSION_USER();
-- CHARSET(str)獲取字符串的字符集函數,返回參數字符串str使用的字符集
SELECT CHARSET('AAA');
-- COLLATION(str)返回參數字符串str的排列方式
SELECT COLLATION('ABCD');
-- LAST_INSERT_ID()獲取最后一個自動生成的ID值的函數,將自動返回最后一個INSERT或UPDATE為AUTO_INCREMENT列設置的第一個發生的值
SELECT LAST_INSERT_ID();
數據加密與解密函數
-- PASSWORD(str)加密函數,該函數計算原明文密碼str,并返回加密后的密碼字符串
-- PASSWORD()在mysql 8.0版本已棄用
SELECT PASSWORD('AAA');
-- MD5(str)加密函數,該函數為參數字符串str計算出一個MD5128位校驗和,該值以32位十六進制數字的二進制字符串形式返回
SELECT MD5('BADAO');
-- ENCODE(str,pass_str)加密函數,該函數使用參數pass_str作為密鑰,加密參數str
-- 在mysql 8.0版本已棄用
SELECT ENCODE('AAA','BADAO');
-- 在mysql 8.0版本已棄用
-- DECODE(crypt_str,pass_str)解密函數,該函數使用參數pass_str作為密鑰,解密參數加密字符串crypt_str
其它函數
-- FORMAT(X,D)格式化函數,該函數將數值參數x格式化,并以四舍五入的方式保留小數點后d位,結果以字符串形式返回
SELECT FORMAT('2.123456',2);
-- CONV(N,from_base,to_base)不用進制的數字進行轉換的函數,該函數將數字n從form_base轉換到to_base,并以字符串形式返回。
-- 其中,參數n被解釋為一個整數,但是也可以被指定為一個字符串。其最小基為2,最大為36
SELECT CONV(10,10,2);
-- INET_ATON(expr)IP地址與數字相互轉換的函數,該函數將參數expr(作為字符串的網絡地址的點地址)轉換成一個代表該地址數值的整數
-- 數字網絡地址可以是4位或8位
SELECT INET_ATON('192.168.1.1');
-- INET_NTOA(expr)數字網絡地址轉換成字符串網絡地址函數,該函數將參數expr(數字網絡地址,4位或8位)轉換成字符串類型的該地址的點地址表示
SELECT INET_NTOA('3232235777');
-- GET_LOCK(str,timeout)加鎖函數,該函數使用參數字符串str給定的名字得到一個鎖,超時時間位timeout秒。若成功得到鎖,返回1;若超時操作,返回0;若發生錯誤,返回NULL
SELECT GET_LOCK('BADAO',3);
-- RELEASE_LOCK(str)該函數解開被GET_LOCK()獲取的用字符串str命名的鎖。若鎖被解開,返回1;若該線程尚未創建鎖,返回0(此時鎖沒有被解開)
-- 若命名的鎖不存在,返回NULL
SELECT RELEASE_LOCK('BADAO');
-- IS_FREE_LOCK(str)該函數檢查名為str的鎖是否可以使用(也就是說沒有被鎖)。若鎖可以用,返回1;若鎖正在被使用,返回0;如出現參數錯誤,返回NULL
SELECT IS_FREE_LOCK('BADAO');
-- IS_USED_LOCK(str)該函數檢查名為str的鎖是否正在被使用(也就是說被鎖)。若鎖正在被鎖,返回使用該鎖的客戶端的連接標識符,否則返回NULL
SELECT IS_USED_LOCK('BADAO');
-- BENCHMARK(count,expr)重復執行指定操作的函數,該函數重復count次執行表達式expr。該函數可以用于計算Mysql處理表達式的速度,
-- 結果值通常為0(0只是表示處理過程很快,并不是沒有花費時間)。該函數的另一個作用是在Mysql客戶端內部報告語句執行的時間。
SELECT BENCHMARK(1000000,1+1);
-- CONVERT(expr USING transcoding_name)改變字符集函數,該函數可以改變字符串默認的字符集
SELECT CHARSET('BADAO');
SELECT CHARSET(CONVERT('BADAO' USING GBK));
-- CAST(expr AS type) CONVERT(expr,type)改變數據類型的函數,將參數expr由一個類型轉換為另外一個類型
SELECT CAST(3.14 AS SIGNED);