MySQL函数/数据库函数
文章目錄
- 一、單行函數
- (一)數學函數
- 1. round(x),返回離 x 最近的整數,即對 x 進行四舍五入
- 2. round(x,y),返回數值 x 保留到小數點后 y 位的值
- 3. truncate(x,y),返回數值 x 保留到小數點后 y 位的值
- 4. abs(x),返回 x 的絕對值
- 5.sqrt(x),返回 x 的二次方根
- 6.mod(x,y),返回 x 被 y 除后的余數
- 7.ceil(x) 或 ceiling(x),返回不小于 x 的最小整數
- 8.foor(x),返回不大于 x 的最大整數
- 9. sign(x),返回參數 x 的符號,-1 表示負數,0 表示 0,1 表示正數
- 10. pow(x,y) 或 power(x,y),返回 x 的 y 次乘方的值
- 11. exp(x),返回 e 的 x 乘方后的值
- 12. log(x),返回 x 的自然對數
- 13. log10(x),返回 x 的基數為 10 的對數
- 14. radians(x),返回 x 由角度轉化為弧度的值
- 15. degrees(x),返回 x 由弧度轉化為角度的值
- 16. sin(x),前者返回 x 的正弦,其中 x 為給定的弧度值
- 17. asin(x),返回 x 的反正弦值,x 為正弦
- 18. COS(x),返回 x 的余弦,其中 x 為給定的弧度值
- 19. ACOS(x),返回 x 的反余弦值,x 為余弦
- 20. tan(x),返回 x 的正切,其中 x 為給定的弧度值
- 21. atan(x),返回 x 的反正切值,x 為正切
- 22. cot(x),返回給定弧度值 x 的余切
- (二)字符串函數
- 1. left(s,n),返回字符串 s 左邊的 n 個字符
- 2. concat(s1,s2,...,sn),將參數拼接成一個字符串
- 3. concat_ws(x,s1,s2,...),返回多個字符串拼接之后的字符串,每個字符串之間有一個x
- 4. char_length(str),計算字符串字符個數
- (三)日期和時間函數
- 1. STR_TO_DATE(string, format_mask),將字符串轉變為日期
- 2. DATE_FORMAT(d,f),按表達式 f 的要求顯示日期 d
- 3. now(),獲取當前的系統日期和時間
- 4. dayofweek(date),返回日期 date 是星期幾
- 5. dayname(date),返回日期 date 是星期幾
- 6. time_to_sec(t),將時間 t 轉換為秒
- 7. sec_to_time(s),將秒數 s 轉換成時間
- 8. from_unixtime(unix_tiemstamp,format),把時間戳轉化成日期時間
- 9. unix_timestamp(date),日期轉換成時間戳
- (四)條件判斷函數
- 1. case 語句
- 2. ifnull(v1,v2),空值轉換函數
- (五)其它函數
- 1. coalesce(expr1, expr2, ...., expr_n),返回參數列表中第一個非空參數
- 2. cast(x AS type),將 x 變成 type 類型
- 3. inet_aton(expr),將IP地址轉成32位的二進制整數
- 4.inet_ntoa(expr),將二進制整數轉成IP地址
- 二、組函數
- (一)數學函數
- 1. count (expression),返回查詢的記錄總數
- 2. avg(expression),返回一個表達式的平均值
- 3. sum(expression),返回指定字段的總和
- 4. max(expression),返回字段 expression 中的最大值
- 5. min(expression),返回字段 expression 中的最小值
一、單行函數
單行函數是每行數據返回一行結果
(一)數學函數
1. round(x),返回離 x 最近的整數,即對 x 進行四舍五入
mysql> select round(455.476); +----------------+ | round(455.476) | +----------------+ | 455 | +----------------+ 1 row in set (0.00 sec)2. round(x,y),返回數值 x 保留到小數點后 y 位的值
y 是要保留的小數位數,如果沒有指定 y,則默認是 0。
返回最接近 x 的數,其值保留到小數點后面 y 位,截取時會四舍五入。
mysql> select round(455.476,2); +------------------+ | round(455.476,2) | +------------------+ | 455.48 | +------------------+ 1 row in set (0.00 sec)若 y 為負值,則會將小數點左邊 y 位的數舍棄為 0。截取時也會進行四舍五入。
mysql> select round(445.476,-2); +-------------------+ | round(445.476,-2) | +-------------------+ | 400 | +-------------------+ 1 row in set (0.00 sec)445.476,小數點左邊的 2 位舍棄變成 0,因為從小數點向左數第 2 個數 4 不足以向前進數,所以最終的結果是 400。
mysql> select round(455.476,-2); +-------------------+ | round(455.476,-2) | +-------------------+ | 500 | +-------------------+ 1 row in set (0.00 sec)因為從小數點向左數第 2 個數 5 足以向前進數,所以最終的結果是 500。
3. truncate(x,y),返回數值 x 保留到小數點后 y 位的值
與 round(x,y) 的區別是不會進行四舍五入。如果沒有第二個參數 , 默認是 0。
4. abs(x),返回 x 的絕對值
5.sqrt(x),返回 x 的二次方根
x 是一個非負數。
6.mod(x,y),返回 x 被 y 除后的余數
7.ceil(x) 或 ceiling(x),返回不小于 x 的最小整數
8.foor(x),返回不大于 x 的最大整數
9. sign(x),返回參數 x 的符號,-1 表示負數,0 表示 0,1 表示正數
10. pow(x,y) 或 power(x,y),返回 x 的 y 次乘方的值
11. exp(x),返回 e 的 x 乘方后的值
e 是自然對數的底數,是無理數,e 常用于對數,其值是 2.71828…
e = (1+1/n)n(1+1/n)^n(1+1/n)n,其中 n 趨向無窮大。隨著 n 的增大,底數 (1+1/n) 就會越來越接近 1,而指數 n 趨向無窮大,那 (1+1/n)n(1+1/n)^n(1+1/n)n 最后的結果到底是趨向于 1 還是無窮大呢?其實,是趨向于 2.718281828…,這是一個無限不循環小數。
什么是對數?
如果a的x次方等于N(a>0,且a≠1),那么數x叫做以a為底N的對數(logarithm),記作x=loga N。其中,a叫做對數的底數,N叫做真數。
12. log(x),返回 x 的自然對數
y = log(x),返回 x 的自然對數,即 x 相對于基數 e 的對數,eye^yey = x。
eye^yey = x,其中 y 叫做以 e 為底,真數為 x 的對數,這個 y 也叫自然對數。
自然對數就是以無理數 e 為底的對數,記為 lnN。
13. log10(x),返回 x 的基數為 10 的對數
y = log10(x),10y10^y10y = x,其中 y 就是以 10 為底數,真數為 x 的對數。
14. radians(x),返回 x 由角度轉化為弧度的值
15. degrees(x),返回 x 由弧度轉化為角度的值
16. sin(x),前者返回 x 的正弦,其中 x 為給定的弧度值
17. asin(x),返回 x 的反正弦值,x 為正弦
18. COS(x),返回 x 的余弦,其中 x 為給定的弧度值
19. ACOS(x),返回 x 的反余弦值,x 為余弦
20. tan(x),返回 x 的正切,其中 x 為給定的弧度值
21. atan(x),返回 x 的反正切值,x 為正切
22. cot(x),返回給定弧度值 x 的余切
(二)字符串函數
1. left(s,n),返回字符串 s 左邊的 n 個字符
返回字符串 runoob 中的前兩個字符:
SELECT LEFT('runoob',2) -- ru2. concat(s1,s2,…,sn),將參數拼接成一個字符串
字符串 s1,s2 等多個字符串合并為一個字符串。
如果有任何一個參數為 null,則返回值為 null;如果所有參數都為非二進制字符串,則返回結果為非二進制字符串;如果有任何一個參數為二進制字符串,則返回結果為二進制字符串。
另外要注意數字參數會被轉換成等值的二進制數字符串,要避免此種情況,可以使用函數 cast()
合并多個字符串:
SELECT CONCAT("SQL ", "Runoob ", "Gooogle ", "Facebook") AS concatenated_string;3. concat_ws(x,s1,s2,…),返回多個字符串拼接之后的字符串,每個字符串之間有一個x
4. char_length(str),計算字符串字符個數
(三)日期和時間函數
1. STR_TO_DATE(string, format_mask),將字符串轉變為日期
相當于 Oracle 中的 to_date()。
日期時間格式:
%M 解析英文的月份,例如:August
%m 解析數字的月份
舉例如下:
mysql> SELECT STR_TO_DATE("August 10 2017", "%M %d %Y"); +-------------------------------------------+ | STR_TO_DATE("August 10 2017", "%M %d %Y") | +-------------------------------------------+ | 2017-08-10 | +-------------------------------------------+ 1 row in set (0.00 sec)mysql> INSERT INTO t_order(order_time) VALUES(str_to_date('2018-05-06','%Y-%m-%d')); mysql> UPDATE t_project SET start_date = STR_TO_DATE("2021-09-19","%Y-%m-%d") WHERE id = 00000000010;將日期數據保存到 Date 類型的字段中:
mysql> INSERT INTO t_order(order_time) VALUES(str_to_date('2018-05-06','%Y-%m-%d')); mysql> UPDATE t_project SET start_date = STR_TO_DATE("2021-09-19","%Y-%m-%d") WHERE id = 00000000010; mysql> UPDATE t_project SET start_date = STR_TO_DATE("09-23-2019","%m-%d-%Y") WHERE id = 00000000010; mysql> UPDATE t_project SET start_date = STR_TO_DATE("09.23.2019","%m.%d.%Y") WHERE id = 00000000010;注意:
STR_TO_DATE(字符串日期,解析格式)中的字符串日期要和解析格式一一對應。
2. DATE_FORMAT(d,f),按表達式 f 的要求顯示日期 d
這就是日期轉換成字符串的函數,相當于 Oracle 的 to_char()。
mysql> SELECT DATE_FORMAT(sysdate(),'%m-%d-%Y %r'); +--------------------------------------+ | DATE_FORMAT(sysdate(),'%m-%d-%Y %r') | +--------------------------------------+ | 06-04-2021 09:01:21 AM | +--------------------------------------+ 1 row in set (0.00 sec) mysql> select company_name,date_format(insert_time,'%Y,%m,%d') as insert_date from tf_company where company_name like '%建發%'; +-----------------------------------------+-------------+ | company_name | insert_date | +-----------------------------------------+-------------+ | 建發房地產集團上海有限公司 | 2021,02,21 | | 建發(上海)有限公司 | 2021,02,21 | | 建發房地產集團南京有限公司 | 2021,02,26 | +-----------------------------------------+-------------+ 3 rows in set (0.03 sec) mysql> SELECT DATE_FORMAT('2011-11-11 11:11:11','%m-%d-%Y %r'); +--------------------------------------------------+ | DATE_FORMAT('2011-11-11 11:11:11','%m-%d-%Y %r') | +--------------------------------------------------+ | 11-11-2011 11:11:11 AM | +--------------------------------------------------+ 1 row in set (0.00 sec)說明:
如下示例:
mysql> SELECT DATE_FORMAT('11-11-2011 11:11:11','%Y-%m-%d %r'); +--------------------------------------------------+ | DATE_FORMAT('11-11-2011 11:11:11','%Y-%m-%d %r') | +--------------------------------------------------+ | NULL | +--------------------------------------------------+ 1 row in set, 1 warning (0.00 sec)也可以將日期轉換成字符串格式存到 Date 類型的字段中:
mysql> UPDATE t_project SET start_date = DATE_FORMAT('2021-08-21','%Y-%m-%d') WHERE id = 00000000010;注意:
1.Date 類型的字段只能按“年月日”格式保存
2.DATE_FORMAT(日期,顯示格式),日期和顯示格式要一一對應,且只能按“年月日”的順序寫
3.保存時不論分隔符是什么,查詢日期數據的顯示格式都是“年-月-日”
3. now(),獲取當前的系統日期和時間
了解詳情,猛戳《MySQL 獲取系統日期/系統時間的函數》
4. dayofweek(date),返回日期 date 是星期幾
mysql> select dayofweek('2016-01-16'); +-------------------------+ | dayofweek('2016-01-16') | +-------------------------+ | 7 | +-------------------------+ 1 row in set (0.03 sec)注意:星期天=1,星期一=2, … 星期六=7
5. dayname(date),返回日期 date 是星期幾
顯示英文名稱。
mysql> select dayname('2016-01-16'); +-----------------------+ | dayname('2016-01-16') | +-----------------------+ | Saturday | +-----------------------+ 1 row in set (0.07 sec)6. time_to_sec(t),將時間 t 轉換為秒
把時間轉化成秒數。
7. sec_to_time(s),將秒數 s 轉換成時間
把秒數轉化成時間(時分秒格式)。
8. from_unixtime(unix_tiemstamp,format),把時間戳轉化成日期時間
把 unix 時間戳轉換為可讀的時間
mysql> select from_unixtime(23434343,'%Y %m %d %H %I %S'); +---------------------------------------------+ | from_unixtime(23434343,'%Y %m %d %H %I %S') | +---------------------------------------------+ | 1970 09 29 13 01 23 | +---------------------------------------------+ 1 row in set (0.00 sec)mysql> select from_unixtime('23434343','%Y %m %d %H %I %S'); +-----------------------------------------------+ | from_unixtime('23434343','%Y %m %d %H %I %S') | +-----------------------------------------------+ | 1970 09 29 13 01 23 | +-----------------------------------------------+ 1 row in set (0.00 sec)9. unix_timestamp(date),日期轉換成時間戳
把可讀的時間轉換為 unix 時間戳。
mysql> select unix_timestamp('2009-08-06 10:10:40'); +---------------------------------------+ | unix_timestamp('2009-08-06 10:10:40') | +---------------------------------------+ | 1249524640 | +---------------------------------------+ 1 row in set (0.00 sec)(四)條件判斷函數
1. case 語句
case 語句是數據庫中的分支語句 , 相當于 Java 中的 switch-case 語句。
CASE expressionWHEN condition1 THEN result1WHEN condition2 THEN result2...WHEN conditionN THEN resultNELSE result END舉例:
select ename , salary , job , case job when 'Analyst' then salary * 1.1 --注意這里沒有“ , ” when 'Programmer' then salary * 1.05 when 'clerk' then else salary -- else 相當于 Java 中 case 語句的 default end new_salary -- end 是 case 語句的結束標識,new_salary 是從 case 開始到 end 結束這部分 的別名 salary * 1.02 from emp_xxx ;2. ifnull(v1,v2),空值轉換函數
如果 v1 的值不為 NULL,則返回 v1,否則返回 v2
(五)其它函數
1. coalesce(expr1, expr2, …, expr_n),返回參數列表中第一個非空參數
參數列表中最后一個值通常為常量。
舉例如下:
select ename, bonus, salary, coalesce( bonus , salary*0.5 , 100 ) bonus_year from emp_htlwk; # bonus不為空則返回bonus的值,若為空,則判斷salary*0.5是否為空,不為空則返回salary*0.5的值,若為空則返回常數100需求描述:有分紅的以分紅金額作為年終獎,有工資沒有分紅的以月薪的50%作為年終獎,沒有分紅又沒有月薪的休假人員施舍100元作為年終獎。
2. cast(x AS type),將 x 變成 type 類型
將數值轉換成字符類型:
mysql> select cast(120 as char); +-------------------+ | cast(120 as char) | +-------------------+ | 120 | +-------------------+ 1 row in set (0.03 sec)將字符串轉換成日期類型:mysql> select cast('2022-02-2' as date); +---------------------------+ | cast('2022-02-2' as date) | +---------------------------+ | 2022-02-02 | +---------------------------+ 1 row in set (0.03 sec)3. inet_aton(expr),將IP地址轉成32位的二進制整數
mysql> select inet_aton('192.168.0.0'); +--------------------------+ | inet_aton('192.168.0.0') | +--------------------------+ | 3232235520 | +--------------------------+ 1 row in set (0.00 sec)4.inet_ntoa(expr),將二進制整數轉成IP地址
mysql> select inet_ntoa('323223'); +---------------------+ | inet_ntoa('323223') | +---------------------+ | 0.4.238.151 | +---------------------+ 1 row in set (0.00 sec)mysql> select inet_ntoa(323223); -- 可以去掉引號 +-------------------+ | inet_ntoa(323223) | +-------------------+ | 0.4.238.151 | +-------------------+ 1 row in set (0.00 sec)二、組函數
與單行函數不同 , 單行函數是每行數據返回一行結果 , 組函數是多行數據返回一行結果。
(一)數學函數
1. count (expression),返回查詢的記錄總數
expression 參數是一個字段或者 * 號。常用于查詢表的記錄總數。
2. avg(expression),返回一個表達式的平均值
expression 是一個字段。
返回 products 表中 price 字段的平均值:
SELECT AVG(price) AS average_price FROM products;3. sum(expression),返回指定字段的總和
expression 是一個字段。
計算 order_details 表中字段 quantity 的總和:
SELECT SUM(quantity) FROM order_details;4. max(expression),返回字段 expression 中的最大值
對所有數據類型都可以操作。如果參數寫列名 , 默認忽略空值。
5. min(expression),返回字段 expression 中的最小值
對所有數據類型都可以操作。如果參數寫列名 , 默認忽略空值。
總結
以上是生活随笔為你收集整理的MySQL函数/数据库函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ddos攻击带宽消耗有哪些方式(ddos
- 下一篇: 工口安卓版下载安装(工口安卓版)