Mysql常用函數解析

字符串函數

CONCAT(str1, str2, …)

將多個字符串連接成一個字符串。

SELECT CONCAT('Hello', ' ', 'World'); -- 輸出: Hello World

??SUBSTRING(str, start, length)

截取字符串的子串(起始位置從1開始)。

SELECT SUBSTRING('MySQL', 3, 2); -- 輸出: 'SQ'

??LENGTH(str)

返回字符串的字節數(注意字符集影響)。

SELECT LENGTH('數據庫'); -- UTF-8下輸出: 9(每個中文3字節)

CHAR_LENGTH(str)

返回字符串的字符數(忽略字節)。

SELECT CHAR_LENGTH('數據庫'); -- 輸出: 3

?TRIM([LEADING|TRAILING|BOTH] ‘char’ FROM str)

去除字符串兩端(或指定方向)的指定字符。

SELECT TRIM('   MySQL   '); -- 輸出: 'MySQL'

數值函數

???ROUND(num, decimals)??

四舍五入到指定小數位數。

SELECT ROUND(3.1415, 2); -- 輸出: 3.14

???CEIL(num)?? 和 ??FLOOR(num)

向上取整和向下取整。

SELECT CEIL(3.2), FLOOR(3.8); -- 輸出: 4, 3

?????RAND()

生成0到1之間的隨機浮點數。

SELECT FLOOR(RAND() * 100); -- 生成0-99的隨機整數

???????ABS(num)

返回絕對值。

SELECT ABS(-10); -- 輸出: 10

日期時間函數?

?????????NOW()

返回當前日期和時間(格式:YYYY-MM-DD HH:MM:SS)。

SELECT NOW(); -- 輸出: 2023-10-01 14:30:00

???????????DATE_FORMAT(date, format)

格式化日期時間。

SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日'); -- 輸出: 2023年10月01日

??DATEDIFF(date1, date2)

計算兩個日期之間的天數差。

SELECT DATEDIFF('2023-10-10', '2023-10-01'); -- 輸出: 9

TIMESTAMPDIFF(unit, start, end)

計算兩個日期的時間差(單位:DAY/MONTH/YEAR等)。

SELECT TIMESTAMPDIFF(MONTH, '2023-01-01', '2023-10-01'); -- 輸出: 9
-- 若 end_time 早于 start_time,結果為負數。

支持的 unit 參數值:

單位說明示例
MICROSECOND微秒差(1秒=1,000,000微秒)TIMESTAMPDIFF(MICROSECOND, ‘08:00:00’, ‘08:00:00.123456’) → 123456
SECOND整數秒差(忽略微秒部分)TIMESTAMPDIFF(SECOND, ‘08:00:00’, ‘08:01:30’) → 90
MINUTE整數分鐘差(基于秒差向下取整)TIMESTAMPDIFF(MINUTE, ‘08:00:00’, ‘08:01:30’) → 1
HOUR整數小時差(基于分鐘差向下取整)TIMESTAMPDIFF(HOUR, ‘08:15:00’, ‘12:30:00’) → 4
DAY整數天數差(基于時間差計算完整天數)TIMESTAMPDIFF(DAY, ‘2023-10-01’, ‘2023-10-05’) → 4
WEEK整數周差(等同于 FLOOR(TIMESTAMPDIFF(DAY, …) / 7))TIMESTAMPDIFF(WEEK, ‘2023-10-01’, ‘2023-10-15’) → 2
MONTH整數月差(基于日歷月,忽略天數差異)TIMESTAMPDIFF(MONTH, ‘2023-01-15’, ‘2023-03-10’) → 2
QUARTER整數季度差(1季度=3個月)TIMESTAMPDIFF(QUARTER, ‘2023-01-01’, ‘2023-10-01’) → 3
YEAR整數年差(基于日歷年,忽略月內天數)TIMESTAMPDIFF(YEAR, ‘2020-02-29’, ‘2023-02-28’) → 3

流程控制函數?

??IF(condition, value_if_true, value_if_false)

簡單條件判斷。

SELECT IF(score >= 60, '及格', '不及格') AS result FROM students;

??CASE WHEN

多條件分支處理。

SELECT CASE WHEN salary > 10000 THEN '高薪'WHEN salary > 5000 THEN '中薪'ELSE '低薪'END AS level
FROM employees;

聚合函數?

????SUM(column)

計算某列的總和。

SELECT SUM(salary) FROM employees;

??????AVG(column)

計算平均值。

SELECT AVG(score) FROM exams;

???????COUNT(column)

統計行數(注意:COUNT(*)包含NULL,COUNT(column)忽略NULL)。

SELECT COUNT(*) FROM users; -- 統計所有行數

???????GROUP_CONCAT(column SEPARATOR ‘sep’)

將分組后的多行數據合并為一個字符串。

SELECT department, GROUP_CONCAT(name SEPARATOR ', ') 
FROM employees 
GROUP BY department;

空值函數

???????COALESCE(value1, value2, …)??

返回第一個非NULL的值。

SELECT COALESCE(NULL, '備用值'); -- 輸出: '備用值'

?????????IFNULL(value, default)

如果值為NULL,返回默認值。

SELECT IFNULL(email, '未填寫') FROM users;

JSON操作函數

JSON 路徑語法?

$ 表示根節點。
$.key 訪問對象的鍵。
$[index] 訪問數組元素(索引從 0 開始)。
$.* 匹配所有成員。
$.a.b 嵌套訪問。

?????????JSON 創建與修改?

??JSON_ARRAY([value1, value2, …])??

創建 JSON 數組。

SELECT JSON_ARRAY('a', 1, TRUE, NULL); 
-- 輸出: ["a", 1, true, null]

????JSON_OBJECT([key1, value1, key2, value2, …])

創建 JSON 對象。

SELECT JSON_OBJECT('name', 'Alice', 'age', 25);
-- 輸出: {"name": "Alice", "age": 25}

????JSON_SET(json_doc, path, val [, path, val]…)

插入或更新 JSON 中的字段(若路徑存在則更新,不存在則插入)。

SELECT JSON_SET('{"a": 1}', '$.b', 2); 
-- 輸出: {"a": 1, "b": 2}

????JSON_INSERT(json_doc, path, val [, path, val]…)

僅在路徑不存在時插入新字段。

SELECT JSON_INSERT('{"a": 1}', '$.a', 100, '$.b', 2); 
-- 輸出: {"a": 1, "b": 2} (僅插入不存在的路徑)

?JSON_REPLACE(json_doc, path, val [, path, val]…)

僅更新已存在的路徑。

SELECT JSON_REPLACE('{"a": 1, "b": 2}', '$.a', 100, '$.c', 3);
-- 輸出: {"a": 100, "b": 2} (僅更新存在的路徑)

??JSON_REMOVE(json_doc, path [, path]…)

刪除 JSON 中的指定路徑。

SELECT JSON_REMOVE('{"a": 1, "b": 2}', '$.a'); 
-- 輸出: {"b": 2}

JSON 查詢與提取?

JSON_EXTRACT(json_doc, path)?? 或 ??->?? 操作符

提取 JSON 中的值(支持路徑表達式)。

SELECT JSON_EXTRACT('{"user": {"name": "Alice", "age": 25}}', '$.user.name');
-- 輸出: "Alice"-- 等效寫法(MySQL 5.7+):
SELECT data->'$.user.age' FROM users;

JSON_UNQUOTE(json_val)

去除 JSON 字符串的引號。

SELECT JSON_UNQUOTE(JSON_EXTRACT('{"name": "Alice"}', '$.name')); 
-- 輸出: Alice

JSON_CONTAINS(json_doc, val [, path])

檢查 JSON 中是否包含指定值。

SELECT JSON_CONTAINS('{"a": [1, 2, 3]}', '2', '$.a'); 
-- 輸出: 1 (true)

JSON_SEARCH(json_doc, ‘one|all’, search_str)

查找包含指定字符串的路徑。

SELECT JSON_SEARCH('{"user": {"name": "Alice"}}', 'one', 'Alice');
-- 輸出: "$.user.name"

JSON 聚合與轉換?

??JSON_ARRAYAGG(expr)

將多行數據聚合為 JSON 數組。

SELECT JSON_ARRAYAGG(name) FROM users; 
-- 輸出: ["Alice", "Bob", "Charlie"]

????JSON_OBJECTAGG(key, value)

將鍵值對聚合為 JSON 對象。

SELECT JSON_OBJECTAGG(id, name) FROM users; 
-- 輸出: {"1": "Alice", "2": "Bob"}

JSON_TYPE(json_val)??

返回 JSON 值的類型(如 OBJECT, ARRAY, STRING, INTEGER)。

SELECT JSON_TYPE(JSON_EXTRACT('{"a": [1, "b"]}', '$.a')); 
-- 輸出: ARRAY

子查詢

子查詢類型

標量子查詢(Scalar Subquery)??

返回單個值(一行一列)。
常用在 ??SELECT??、??WHERE?? 或 ??HAVING?? 中。

-- 示例:查詢工資高于平均工資的員工
SELECT name, salary 
FROM employees 
WHERE salary > (SELECT AVG(salary) FROM employees);

行子查詢(Row Subquery)??

返回單行多列。

-- 示例:查詢工資高于平均工資的員工
-- 示例:查詢與指定員工部門和職位相同的其他員工
SELECT name 
FROM employees 
WHERE (department, job_title) = (SELECT department, job_title FROM employees WHERE name = 'Alice'
);

列子查詢(Column Subquery)??

返回多行單列。
常與 ??IN??、??ANY??、??ALL?? 等操作符搭配使用。

-- 示例:查詢所有在銷售部或技術部的員工
SELECT name 
FROM employees 
WHERE department IN (SELECT department FROM departments WHERE location = 'New York'
);

表子查詢(Table Subquery)??

返回多行多列。
通常作為派生表(Derived Table)出現在 ??FROM?? 子句。

-- 示例:查詢每個部門的平均工資,并與公司平均工資比較
SELECT department, AVG(salary) AS dept_avg,(SELECT AVG(salary) FROM employees) AS company_avg
FROM employees 
GROUP BY department;

子查詢與操作符?

IN / NOT IN?

-- 示例:查詢購買了某產品的客戶
SELECT customer_name 
FROM customers 
WHERE customer_id IN (SELECT customer_id FROM orders WHERE product_id = 1001
);

ANY / SOME?

與比較符(>、<、= 等)搭配,表示滿足任一結果。

-- 示例:查詢工資高于技術部任一員工的員工
SELECT name 
FROM employees 
WHERE salary > ANY (SELECT salary FROM employees WHERE department = '技術部'
);

?ALL?

表示滿足所有結果。

-- 示例:查詢工資高于所有技術部員工的員工
SELECT name 
FROM employees 
WHERE salary > ALL (SELECT salary FROM employees WHERE department = '技術部'
);

??EXISTS / NOT EXISTS?

檢查子查詢是否返回結果(更高效,常用于關聯子查詢)。

-- 示例:查詢至少有一個訂單的客戶
SELECT customer_name 
FROM customers c 
WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id
);

類型轉換函數

CAST(expr AS type)?

?功能??:將表達式轉換為指定類型。
??支持類型??:
BINARY(二進制)
CHAR(字符串)
DATE、DATETIME、TIME
DECIMAL
SIGNED(有符號整數)、UNSIGNED(無符號整數)

-- 字符串轉整數
SELECT CAST('123' AS SIGNED);  -- 輸出: 123-- 浮點數轉 DECIMAL(控制精度)
SELECT CAST(3.1415 AS DECIMAL(5,2));  -- 輸出: 3.14 (總位數 5,小數位 2)-- 時間戳轉日期
SELECT CAST(NOW() AS DATE);  -- 輸出: 2023-10-01

CONVERT(expr, type)?? 或 ??CONVERT(expr USING charset)

功能??:
轉換數據類型(同 CAST)。
轉換字符集(如 utf8mb4 轉 latin1)。

-- 字符串轉整數
SELECT CONVERT('456', SIGNED);  -- 輸出: 456-- 轉換字符集
SELECT CONVERT('你好' USING latin1);  -- 輸出可能為亂碼(如字符集不支持)

with as 子句

WITH dept_avg AS (SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department
)
SELECT * FROM dept_avg WHERE avg_salary > 10000;

union

SELECT column1, column2 FROM table1
UNION [ALL | DISTINCT]
SELECT column1, column2 FROM table2
[ORDER BY column1]
[LIMIT N];

?UNION DISTINCT??:默認行為,合并結果并去重。
??UNION ALL??:保留所有重復行。
??ORDER BY?? 和 ??LIMIT??:對整個合并后的結果集生效(非單個查詢)。

group by having

對分組后的結果進行過濾(類似于 WHERE,但作用于分組后的數據)。

SELECT column1, aggregate_function(column2)
FROM table
GROUP BY column1
HAVING condition;

GROUP BY 與 WHERE 的區別??:
??WHERE??:在分組前過濾數據(作用于原始數據行)。
??HAVING??:在分組后過濾數據(作用于聚合結果)。

SELECT employee_id, COUNT(*) AS order_count
FROM orders
WHERE department = '銷售部'  -- 先過濾部門
GROUP BY employee_id
HAVING order_count > 50;    -- 再過濾分組結果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/81330.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81330.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81330.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringMVC 前后端數據交互 中文亂碼

ajax 前臺傳入數據&#xff0c;但是后臺接收到的數據中文亂碼 首先我們分析一下原因&#xff1a;我們調用接口的時候傳入的中文&#xff0c;是沒有亂碼的 此時我們看一下Java后臺接口對應的編碼&#xff1a; 默認情況&#xff1a;Servlet容器&#xff08;如Tomcat&#xff09;默…

loads、dumps、jsonpath使用場景

在處理JSON數據時&#xff0c;loads、dumps 和 jsonpath 是三個非常有用的工具或概念。它們各自在不同的場景下發揮作用&#xff0c;讓我們一一來看&#xff1a; 1. loads loads 函數是 Python 中 json 模塊的一部分&#xff0c;用于將 JSON 格式的字符串解析成 Python 的數據…

Java學習手冊:Spring 事務管理

一、事務管理的概念 事務是一組操作的集合&#xff0c;這些操作要么全部成功&#xff0c;要么全部失敗。事務管理的目的是保證數據的一致性和完整性。在數據庫操作中&#xff0c;事務管理尤為重要&#xff0c;例如銀行轉賬、訂單支付等場景都需要事務管理來確保數據的正確性。…

echarts自定義圖表--柱狀圖-橫向

區別于縱向表格 xAxis和yAxis對調 要將label全部固定到最右側&#xff1a; 隱藏一個柱形 為每個label設置固定的偏移距離 offset: [300 - 80, 0] 在data中加入label的配置 根據現在的值生成距離右側的偏移 更新方法 chart.setOption({series: [{},{data: data.map(v > ({v…

【CV數據集】Visdrone2019無人機目標檢測數據集(YOLO、VOC、COCO格式)

visdrone2019的Task1是非常通用的目標檢測數據集&#xff0c;也是許多人做目標檢測論文和項目必然會用到的數據集&#xff0c;我將該數據集進行了處理&#xff0c;將其YOLO、VOC和COCO格式都整理好&#xff0c;通過下載我整理好的數據集和相關文件&#xff0c;可以直接在自己的…

常見電源的解釋說明

英文縮寫 BJT&#xff08;bipolar junction transistor&#xff09;雙極型結晶體管FET&#xff08;field-effect transistor&#xff09;場效應管TTL&#xff08;Transistor-Transistor Logic&#xff09;三極管CMOS&#xff08;Complementary Metal Oxide Semiconductor&…

【2025年五一數學建模競賽】A題 解題思路與模型代碼

2025年五一數學建模競賽 A題 問題一&#xff1a;推測支路 1 和支路 2 的車流量 1.1 問題描述 根據提供的主路歷史數據以及已知的支路車流量變化趨勢&#xff08;支路1呈線性增長&#xff0c;支路2先線性增長后線性減少&#xff09;&#xff0c;推測這兩個支路在特定時間段&a…

d202551

目錄 一、175. 組合兩個表 - 力扣&#xff08;LeetCode&#xff09; 二、511. 游戲玩法分析 I - 力扣&#xff08;LeetCode&#xff09; 三、1204. 最后一個能進入巴士的人 - 力扣&#xff08;LeetCode&#xff09; 一、175. 組合兩個表 - 力扣&#xff08;LeetCode&#xf…

RISC-V AIA SPEC學習(四)

第五章 Interrupts for Machine andSupervisor Levels 核心內容?? 1.主要中斷類型與默認優先級:?? 定義了機器級別(M-level)和監管者級別(S-level)的標準中斷類型(如MEI、SEI、MTI等)。默認優先級規則:本地中斷(如軟件/定時器)優先級高于外部中斷,RAS事件(如低/高…

WSGI(Web Server Gateway Interface)服務器

0、什么是 WSGI WSGI &#xff08;Web Server Gateway Interface&#xff09; 是一種Python規范&#xff0c;它定義了 Web 服務器 和 Python Web 應用程序之間的通信接口。 即&#xff0c;能夠讓各種 Web 服務器&#xff08;如 Nginx、Apache 等&#xff09;和 Python Web 框架…

博客打卡-人類基因序列功能問題動態規劃

題目如下&#xff1a; 眾所周知&#xff0c;人類基因可以被認為是由4個核苷酸組成的序列&#xff0c;它們簡單的由四個字母A、C、G和T表示。生物學家一直對識別人類基因和確定其功能感興趣&#xff0c;因為這些可以用于診斷人類疾病和設計新藥物。 生物學家確定新基因序列功能…

基本功能學習

一.enum枚舉使用 E_SENSOR_REQ_NONE 的定義及用途 在傳感器驅動開發或者電源管理模塊中&#xff0c;E_SENSOR_REQ_NONE通常被用來表示一種特殊的狀態或請求模式。這種狀態可能用于指示當前沒有活動的傳感器請求&#xff0c;或者是默認初始化狀態下的一種占位符。 可能的定義…

vitest | 測試框架vitest | 總結筆記

目錄 測試框架 vitest 介紹 測試文件的寫法 文件取名&#xff1a;文件名中要有 test&#xff0c;即 xxx.test.ts 引入庫&#xff1a; test 測試&#xff1a; 測試運行&#xff1a; npx test 文件名 &#xff0c;每次保存后會重新運行。 ★ expect 方法&#xff1a; v…

ESP32開發-作為TCP客戶端發送數據到網絡調試助手

??代碼&#xff08;作為TCP客戶端&#xff09;?? #include <SPI.h> #include <EthernetENC.h> // 使用EthernetENC庫// 網絡配置 byte mac[] {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // MAC地址 IPAddress ip(192, 168, 1, 100); // ESP32的IP IPAddr…

HTML5 WebSocket:實現高效實時通訊

一、引言 在當今的 Web 開發領域,實時通訊功能變得越來越重要。例如在線聊天、實時數據更新等場景都需要客戶端與服務器之間能夠進行高效的雙向數據傳輸。HTML5 引入的 WebSocket 協議為我們提供了一種強大的解決方案,它在單個 TCP 連接上實現了全雙工通訊,極大地改善了傳統…

速通Ollama本地部署DeepSeek-r1

下載 Ollama 前往 Ollama官網 下載客戶端&#xff0c;下載完成后點擊Install安裝即可。 完成后會自動安裝在C:盤的AppData文件夾下&#xff0c;命令行輸入ollama后&#xff0c;顯示下圖中的信息表明安裝成功。 下載模型 在官網界面點擊 DeepSeek-R1 超鏈接 跳轉到DeepSeek安裝…

總結C++中的STL

1.STL 概述 STL 即標準模板庫&#xff0c;是 C 標準程序庫的重要組成部分&#xff0c;包含常用數據結構和算法&#xff0c;體現了泛型化程序設計思想&#xff0c;基于模板實現&#xff0c;提高了代碼的可復用性 2.容器 2.1 序列容器&#xff1a; 1. vector 特性&#xff…

自動駕駛-一位從業兩年的獨特視角

時間簡介 2023.03 作為一名大三學生&#xff0c;加入到某量產車企&#xff0c;從事地圖匹配研發 2023.07 地圖匹配項目交付&#xff0c;參與離線云端建圖研發 2023.10 拿到24屆校招offer 2024.07 正式入職 2025.01 離線云端建圖穩定&#xff0c;開始接觸在線車端融圖研發 自動…

《軟件設計師》復習筆記(11.1)——生命周期、CMM、開發模型

目錄 一、信息系統生命周期 系統規劃階段 系統分析階段&#xff08;邏輯設計&#xff09; 系統設計階段&#xff08;物理設計&#xff09; 系統實施階段 系統運行與維護階段 二、能力成熟度模型&#xff08;CMM/CMMI&#xff09; CMM 五級模型 CMMI 兩種表示方法 真題…

1.67g 雨晨 22635.5305 Windows 11 企業版 23H2 極速增強版

五一特別制作 &#xff08;主要更新簡述&#xff09; 全程由最新YCDISM2025裝載制作 1、可選功能&#xff1a; 添加&#xff1a; Microsoft-Windows-LanguageFeatures-Basic-en-us-Package Microsoft-Windows-LanguageFeatures-OCR-en-us-Package 2、功能增強&a…