SQL 實用函數(shù)詳解:提升數(shù)據(jù)操作效率
一、概述
SQL 是一種功能強大的查詢語言,在處理數(shù)據(jù)時,SQL 提供了許多內(nèi)置函數(shù),這些函數(shù)極大地提高了數(shù)據(jù)操作的效率和靈活性。本文將介紹一些常用且實用的 SQL 函數(shù),并提供相應(yīng)的示例代碼來展示這些函數(shù)的使用方法。
二、常用SQL函數(shù)分類
SQL 函數(shù)可以大致分為以下幾類:
- 字符串函數(shù)
- 數(shù)值函數(shù)
- 日期時間函數(shù)
- 聚合函數(shù)
三、字符串函數(shù)
1. CONCAT()
CONCAT() 用于將多個字符串連接在一起。
SELECT CONCAT('Hello', ' ', 'World') AS Greeting;
輸出:
Greeting
---------
Hello World
說明: 以上示例中,CONCAT() 函數(shù)將 Hello、空格和 World 拼接成一個字符串。
2. SUBSTRING()
SUBSTRING() 用于從字符串中提取子字符串。
SELECT SUBSTRING('Hello World', 1, 5) AS Substring;
輸出:
Substring
---------
Hello
說明: SUBSTRING() 從字符串 "Hello World" 的第 1 個字符開始,提取長度為 5 的子字符串。
3. LENGTH()
LENGTH() 用于計算字符串的長度。
SELECT LENGTH('Hello World') AS Length;
輸出:
Length
------
11
說明: LENGTH() 函數(shù)返回字符串 Hello World 的長度。
4. UPPER() 和 LOWER()
UPPER() 函數(shù)將字符串中的所有字母字符轉(zhuǎn)換為大寫。非字母字符保持不變。
SELECT UPPER(name) AS upper_name FROM user;
輸出:
upper
------
ZHY
UYII
ADMIN
說明: UPPER() 函數(shù)返回name字段的大寫形式。
LOWER() 函數(shù)則相反,將字符串中的所有字母字符轉(zhuǎn)換為小寫。非字母字符保持不變。
5. REPLACE()
REPLACE() 函數(shù)用于在字符串中替換所有指定的子字符串為一個新字符串。
UPDATE employees
SET department = REPLACE(department, 'Sales', 'Marketing');
說明: 假設(shè)我們有一個名為 employees 的表,其中有一個名為 department 的列,我們想要將所有部門的名稱中的Sales替換為Marketing。
四、數(shù)值函數(shù)
1. ROUND()
ROUND() 用于將數(shù)字四舍五入到指定的小數(shù)位數(shù)。
SELECT ROUND(123.4567, 2) AS RoundedValue;
輸出:
RoundedValue
------------
123.46
說明: ROUND() 函數(shù)將 123.4567 四舍五入到 2 位小數(shù),結(jié)果為 123.46。
2. CEIL() 和 FLOOR()
CEIL() 函數(shù)返回大于或等于指定數(shù)字的最小整數(shù),而 FLOOR() 函數(shù)返回小于或等于指定數(shù)字的最大整數(shù)。
SELECT CEIL(123.4567) AS CeilValue, FLOOR(123.4567) AS FloorValue;
輸出:
CeilValue | FloorValue
----------------------
124 | 123
說明: CEIL() 函數(shù)將 123.4567 向上取整,而 FLOOR() 函數(shù)將其向下取整。
五、日期時間函數(shù)
1. NOW()
NOW() 函數(shù)返回當(dāng)前的日期和時間。
SELECT NOW() AS CurrentDateTime;
輸出:
CurrentDateTime
-----------------------
2024-08-09 10:35:29
說明: NOW() 函數(shù)返回當(dāng)前的日期和時間,格式為 YYYY-MM-DD HH:MM:SS。
2. DATE_FORMAT()
DATE_FORMAT() 函數(shù)用于以特定格式顯示日期和時間。
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d') AS FormattedDate;
輸出:
FormattedDate
-------------
2024-08-09
說明: DATE_FORMAT() 函數(shù)將當(dāng)前日期格式化為 YYYY-MM-DD 的格式。
3. DATEDIFF()
DATEDIFF() 函數(shù)用于計算兩個日期之間的天數(shù)差。
SELECT DATEDIFF('2024-12-31', '2024-01-01') AS DaysDifference;
輸出:
DaysDifference
---------------
365
說明: DATEDIFF() 函數(shù)計算兩個日期之間的天數(shù)差。
4. CURDATE()
CURDATE() 函數(shù)用于返回當(dāng)前的日期,格式為 YYYY-MM-DD。
SELECT CURDATE() AS CurrentDate;
輸出:
CurrentDate
------------
2024-08-09
說明: CURDATE() 函數(shù)返回當(dāng)前日期,不包含時間部分。
5. CURTIME()
CURTIME() 函數(shù)用于返回當(dāng)前的時間,格式為 HH:MM:SS。
SELECT CURTIME() AS CurrentTime;
輸出:
CurrentTime
------------
10:35:29
說明: CURTIME() 函數(shù)返回當(dāng)前時間,不包含日期部分。
6. DATE_ADD() 和 DATE_SUB()
DATE_ADD() 函數(shù)用于在指定的日期上添加一個時間間隔(如天、月、年等),并返回新的日期。
DATE_SUB() 函數(shù)用于從指定的日期上減去一個時間間隔(如天、月、年等),并返回新的日期。
SELECT DATE_ADD(date, INTERVAL expr unit) AS NewDate;
SELECT DATE_SUB(date, INTERVAL expr unit) AS NewDate;
說明:
- date: 基準日期。
- expr: 需要減去的時間間隔。
- unit: 時間單位(如 DAY、MONTH、YEAR 等)。
7. EXTRACT()
EXTRACT() 函數(shù)用于從日期或時間中提取指定的部分,如年份、月份、天、小時等。
SELECT EXTRACT(YEAR FROM '2024-08-09') AS YearPart;
# 需要提取的部分(如 YEAR、MONTH、DAY、HOUR、MINUTE 等)。
輸出:
YearPart
---------
2024
說明: EXTRACT(YEAR FROM '2024-08-09') 提取日期中的年份部分,結(jié)果為 2024。
六、聚合函數(shù)
1. COUNT()
COUNT() 函數(shù)用于返回滿足條件的行數(shù)。
SELECT COUNT(*) AS TotalRows FROM employees;
輸出:
TotalRows
---------
100
說明: COUNT(*) 函數(shù)計算 employees 表中的總行數(shù)。
2. SUM()
SUM() 函數(shù)用于返回指定列的數(shù)值總和。
SELECT SUM(salary) AS TotalSalary FROM employees;
輸出:
TotalSalary
-----------
500000
說明: SUM() 函數(shù)計算 employees 表中所有員工的工資總和。
3. AVG()
AVG() 函數(shù)用于返回指定列的平均值。
SELECT AVG(salary) AS AverageSalary FROM employees;
輸出:
AverageSalary
-------------
5000
說明: AVG() 函數(shù)計算 employees 表中員工工資的平均值。
七、條件表達式函數(shù)
1. IF()
IF() 函數(shù)用于在 SQL 查詢中實現(xiàn)簡單的條件判斷。根據(jù)條件的真假,返回不同的結(jié)果。
SELECT IF(condition, true_value, false_value);
# 示例
SELECT name, salary, IF(salary > 10000, '高薪', '普通薪資') AS SalaryLevel
FROM employees;
說明:
- condition: 需要判斷的條件表達式。
- true_value: 如果條件為真 (TRUE),返回的值。
- false_value: 如果條件為假 (FALSE),返回的值。
示例: 判斷某員工工資是否大于 10000,如果大于返回"高薪",否則返回"普通薪資"。
name | salary | SalaryLevel
---------------------------------
John Doe | 12000 | 高薪
Jane Smith| 5000 | 普通薪資
2. CASE WHEN
CASE WHEN 函數(shù)用于在 SQL 查詢中實現(xiàn)更復(fù)雜的條件判斷邏輯。它類似于編程語言中的 switch-case 語句,可以根據(jù)多個條件返回不同的結(jié)果。
SELECT
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END AS result_alias;
#示例:
SELECT name, salary,
CASE
WHEN salary > 10000 THEN '高薪'
WHEN salary BETWEEN 4000 AND 10000 THEN '中等薪資'
ELSE '低薪'
END AS SalaryLevel
FROM employees;
說明:
- condition1, condition2, ...: 需要判斷的條件表達式。
- result1, result2, ...: 當(dāng)條件為真時返回的結(jié)果。
- default_result: 當(dāng)所有條件都不滿足時,返回的默認結(jié)果。
- result_alias: 結(jié)果的別名。
示例: 根據(jù)員工的工資水平,劃分為 高薪、中等薪資 和 低薪 三個等級。
name | salary | SalaryLevel
---------------------------------
張三 | 12000 | 高薪
李四 | 7000 | 中等薪資
王五 | 2500 | 低薪
結(jié)語
本文介紹了一些常用的 SQL 函數(shù),這些函數(shù)可以極大地提高 SQL 查詢的效率和靈活性。通過結(jié)合實際應(yīng)用中的場景,我們可以更好地理解并運用這些函數(shù)來處理數(shù)據(jù)。