MySQL常用函數詳解之數值函數
- 一、數值函數概述
- 1.1 數值函數的作用
- 1.2 數值函數分類
- 二、算術運算函數
- 2.1 加法運算(+)
- 2.2 減法運算(-)
- 2.3 乘法運算(*)
- 2.4 除法運算(/ 或 DIV)
- 2.5 取模運算(% 或 MOD)
- 三、數值處理函數
- 3.1 絕對值函數(ABS)
- 3.2 取整函數
- 3.3 符號函數(SIGN)
- 四、三角函數與反三角函數
- 4.1 三角函數
- 4.2 反三角函數
- 五、對數與冪函數
- 5.1 冪函數(POW 或 POWER 或 EXP)
- 5.2 對數函數
- 六、進制轉換函數
- 6.1 十進制轉二進制(BIN)
- 6.2 十進制轉八進制(OCT)
- 6.3 十進制轉十六進制(HEX)
- 6.4 十六進制轉十進制(CONV)
- 七、隨機數函數
- 7.1 生成隨機小數(RAND)
- 7.2 生成指定范圍內的隨機整數(FLOOR(RAND() * (max - min + 1)) + min)
- 八、實戰案例
- 8.1 銷售數據分析
- 8.2 抽獎活動數據生成
- 8.3 科學計算場景
MySQL提供了豐富的數值函數,幫助我們高效地進行數值計算、類型轉換、隨機數生成等操作,無論是簡單的加減乘除,還是復雜的數學運算,這些函數都能大顯身手。本文我將深入剖析MySQL常用數值函數的功能、語法及應用場景,并結合實戰案例,帶你全面掌握數值函數的使用技巧。
一、數值函數概述
1.1 數值函數的作用
數值函數是MySQL中專門用于處理數值型數據的工具,其主要作用包括:
- 基本數學運算:執行加、減、乘、除等基礎算術運算。
- 高級數學計算:實現三角函數、對數、冪運算等復雜數學操作。
- 數值處理與轉換:完成數值的取整、四舍五入、絕對值計算等處理,以及數據類型轉換。
- 隨機數生成:生成隨機數值,滿足測試數據生成、抽獎等業務需求。
1.2 數值函數分類
根據功能特性,MySQL數值函數可分為以下幾類:
- 算術運算函數
- 數值處理函數
- 三角函數與反三角函數
- 對數與冪函數
- 進制轉換函數
- 隨機數函數
二、算術運算函數
2.1 加法運算(+)
在MySQL中,使用+
運算符進行加法運算,支持兩個或多個數值相加。
示例:計算orders
表中quantity
(數量)與unit_price
(單價)的乘積,并加上shipping_fee
(運費),得到訂單總金額。
SELECT quantity, unit_price, shipping_fee, quantity * unit_price + shipping_fee AS total_amount
FROM orders;
2.2 減法運算(-)
-
運算符用于執行減法運算,返回兩個數值的差值。
示例:查詢employees
表中員工的salary
(工資)減去tax
(稅款)后的實際收入。
SELECT salary, tax, salary - tax AS actual_income
FROM employees;
2.3 乘法運算(*)
*
運算符用于實現乘法操作,將兩個或多個數值相乘。
示例:計算products
表中商品庫存數量stock_quantity
與每件商品的體積product_volume
的總體積。
SELECT stock_quantity, product_volume, stock_quantity * product_volume AS total_volume
FROM products;
2.4 除法運算(/ 或 DIV)
/
運算符執行常規除法,返回帶有小數部分的結果;DIV
運算符執行整數除法,返回商的整數部分。
示例:
-- 使用 / 進行常規除法
SELECT 10 / 3 AS normal_division_result;
-- 使用 DIV 進行整數除法
SELECT 10 DIV 3 AS integer_division_result;
2.5 取模運算(% 或 MOD)
%
或MOD
用于計算兩個數相除的余數。
示例:在students
表中,根據學生的student_id
判斷其是否為偶數(余數為0則為偶數)。
SELECT student_id, student_id % 2 = 0 AS is_even
FROM students;
三、數值處理函數
3.1 絕對值函數(ABS)
ABS
函數用于返回數值的絕對值。
示例:計算sales
表中profit
(利潤)字段的絕對值(若利潤為負,表示虧損)。
SELECT profit, ABS(profit) AS absolute_profit
FROM sales;
3.2 取整函數
- 向上取整(CEIL 或 CEILING):
CEIL
函數將數值向上取整到最接近的整數。
示例:SELECT CEIL(3.14) AS ceiling_result;
- 向下取整(FLOOR):
FLOOR
函數將數值向下取整到最接近的整數。
示例:SELECT FLOOR(3.99) AS floor_result;
- 四舍五入(ROUND):
ROUND
函數根據指定的小數位數對數值進行四舍五入。
示例:將orders
表中的total_amount
(訂單總金額)四舍五入到小數點后兩位。SELECT total_amount, ROUND(total_amount, 2) AS rounded_amount FROM orders;
- 截斷取整(TRUNCATE):
TRUNCATE
函數直接截斷數值的小數部分,不進行四舍五入。
示例:SELECT TRUNCATE(3.14159, 2) AS truncated_result;
3.3 符號函數(SIGN)
SIGN
函數返回數值的符號,若數值為正返回1,為負返回-1,為0返回0。
示例:在transactions
表中,判斷transaction_amount
(交易金額)的正負方向。
SELECT transaction_amount, SIGN(transaction_amount) AS amount_sign
FROM transactions;
四、三角函數與反三角函數
4.1 三角函數
- 正弦函數(SIN):
SIN
函數返回角度的正弦值,角度以弧度為單位。
示例:SELECT SIN(RADIANS(30)) AS sine_value; -- 將30度轉換為弧度后計算正弦值
- 余弦函數(COS):
COS
函數返回角度的余弦值。
示例:SELECT COS(RADIANS(60)) AS cosine_value;
- 正切函數(TAN):
TAN
函數返回角度的正切值。
示例:SELECT TAN(RADIANS(45)) AS tangent_value;
4.2 反三角函數
- 反正弦函數(ASIN):
ASIN
函數返回正弦值對應的角度(以弧度為單位)。
示例:SELECT ASIN(0.5) AS arcsine_value;
- 反余弦函數(ACOS):
ACOS
函數返回余弦值對應的角度。
示例:SELECT ACOS(0.5) AS arccosine_value;
- 反正切函數(ATAN):
ATAN
函數返回正切值對應的角度。
示例:SELECT ATAN(1) AS arctangent_value;
五、對數與冪函數
5.1 冪函數(POW 或 POWER 或 EXP)
POW
和POWER
函數用于計算一個數的冪次方,POW(x, y)
或POWER(x, y)
表示x
的y
次方。
示例:SELECT POW(2, 3) AS power_result;
EXP
函數計算自然常數e
的冪次方,即EXP(x)
表示e
的x
次方。
示例:SELECT EXP(1) AS exponential_result;
5.2 對數函數
- 自然對數(LOG):
LOG
函數返回數值的自然對數(以e
為底)。
示例:SELECT LOG(10) AS natural_log_result;
- 以10為底的對數(LOG10):
LOG10
函數返回數值以10為底的對數。
示例:SELECT LOG10(100) AS log10_result;
六、進制轉換函數
6.1 十進制轉二進制(BIN)
BIN
函數將十進制數轉換為二進制字符串。
示例:
SELECT BIN(10) AS binary_result;
6.2 十進制轉八進制(OCT)
OCT
函數將十進制數轉換為八進制字符串。
示例:
SELECT OCT(10) AS octal_result;
6.3 十進制轉十六進制(HEX)
HEX
函數將十進制數轉換為十六進制字符串。
示例:
SELECT HEX(10) AS hexadecimal_result;
6.4 十六進制轉十進制(CONV)
CONV
函數可以將一個數從指定進制轉換為另一個進制,CONV(N, from_base, to_base)
表示將N
從from_base
進制轉換為to_base
進制。
示例:將十六進制數10
轉換為十進制。
SELECT CONV('10', 16, 10) AS converted_result;
七、隨機數函數
7.1 生成隨機小數(RAND)
RAND
函數生成一個大于等于0且小于1的隨機浮點數。
示例:
SELECT RAND() AS random_float;
7.2 生成指定范圍內的隨機整數(FLOOR(RAND() * (max - min + 1)) + min)
通過公式可以生成指定范圍內的隨機整數。
示例:生成1到100之間的隨機整數。
SELECT FLOOR(RAND() * 100) + 1 AS random_integer;
八、實戰案例
8.1 銷售數據分析
在sales
表中,包含product_id
(產品ID)、quantity
(銷售數量)、unit_price
(單價)字段,需求是計算每個產品的銷售總額,并四舍五入到整數,同時統計銷售數量為偶數的產品數量。
SELECT product_id, ROUND(quantity * unit_price) AS total_sales_amount,SUM(CASE WHEN quantity % 2 = 0 THEN 1 ELSE 0 END) AS even_quantity_count
FROM sales
GROUP BY product_id;
8.2 抽獎活動數據生成
為模擬抽獎活動,需要在participants
表中為每個參與者生成一個1到1000的隨機抽獎號碼lottery_number
。
UPDATE participants
SET lottery_number = FLOOR(RAND() * 1000) + 1;
8.3 科學計算場景
在一個物理實驗數據記錄表experiment_data
中,有velocity
(速度)字段,需要根據速度計算對應的動能(動能公式: E k = 1 2 m v 2 E_k = \frac{1}{2}mv^2 Ek?=21?mv2,假設質量m = 1
),并以科學計數法顯示結果。
SELECT velocity, FORMAT(0.5 * POW(velocity, 2), 2, 'e') AS kinetic_energy
FROM experiment_data;
若這篇內容幫到你,動動手指支持下!關注不迷路,干貨持續輸出!
ヾ(′? ˋ)ノヾ(′? ˋ)ノヾ(′? ˋ)ノヾ(′? ˋ)ノヾ(′? ˋ)ノ