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.mzph.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…