文章目录
-
- [1. 字符串函数](#1. 字符串函数)
- [2. 数学函数](#2. 数学函数)
- [3. 聚合函数](#3. 聚合函数)
- [4. 日期和时间函数](#4. 日期和时间函数)
- [5. 条件判断函数](#5. 条件判断函数)
- [6. JSON 函数(MySQL 5.7+)](#6. JSON 函数(MySQL 5.7+))
- [7. 加密和压缩函数](#7. 加密和压缩函数)
MySQL 提供了多种内置函数,这些函数可以用于数据处理、字符串操作、数学计算、日期时间处理等多个方面。以下是一些常用的 MySQL 函数分类及示例:
1. 字符串函数
CONCAT(str1, str2, ...): 连接两个或多个字符串。
LENGTH(str): 返回字符串的长度(字节数)。对于多字节字符集,可能不等于字符数。
CHAR_LENGTH(str): 返回字符串的字符数。
LOWER(str): 将字符串转换为小写。
UPPER(str): 将字符串转换为大写。
SUBSTRING(str, pos, len): 从字符串中提取子字符串。
REPLACE(str, from_str, to_str): 替换字符串中的子串。
TRIM([BOTH | LEADING | TRAILING] [remstr] FROM] str): 去除字符串两侧的空格或指定字符。
CONCAT(s1, s2, ...): 将多个字符串连接成一个字符串。
SELECT CONCAT('Hello', ' ', 'World');
LENGTH(s): 返回字符串的长度(字节数)。
SELECT LENGTH('abc'); -- 返回 3
SUBSTRING(s, start, length): 返回从 start 位置开始的 length 个字符。
SELECT SUBSTRING('abcdef', 2, 3); -- 返回 'bcd'
UPPER(s): 将字符串转换为大写。
SELECT UPPER('hello'); -- 返回 'HELLO'
LOWER(s): 将字符串转换为小写。
SELECT LOWER('HELLO'); -- 返回 'hello'
TRIM(s): 移除字符串两端的空格。
SELECT TRIM(' hello '); -- 返回 'hello'
2. 数学函数
ABS(x): 返回 x 的绝对值。
CEIL(x): 返回大于或等于 x 的最小整数。
FLOOR(x): 返回小于或等于 x 的最大整数。
RAND(): 返回一个 0 到 1 之间的随机浮点数。
ROUND(x, d): 对 x 进行四舍五入,保留 d 位小数。
ABS(x): 返回 x 的绝对值。
SELECT ABS(-10); -- 返回 10
ROUND(x, d): 将 x 四舍五入到 d 位小数。
SELECT ROUND(123.456, 2); -- 返回 123.46
FLOOR(x): 返回小于或等于 x 的最大整数。
SELECT FLOOR(2.7); -- 返回 2
CEIL(x): 返回大于或等于 x 的最小整数。
SELECT CEIL(2.7); -- 返回 3
MOD(x, y): 返回 x 除以 y 的余数。
SELECT MOD(10, 3); -- 返回 1
3. 聚合函数
COUNT(expr): 返回查询结果的行数。
SUM(column): 返回某列值的总和。
AVG(column): 返回某列的平均值。
MAX(column): 返回某列的最大值。
MIN(column): 返回某列的最小值。
COUNT(expression): 计算满足条件的行数。
SELECT COUNT(*) FROM users; -- 返回表中行的数量
SUM(expression): 计算表达式的总和。
SELECT SUM(salary) FROM employees; -- 返回工资总和
AVG(expression): 计算表达式的平均值。
SELECT AVG(salary) FROM employees; -- 返回平均工资
MAX(expression): 返回表达式的最大值。
SELECT MAX(salary) FROM employees; -- 返回最大工资
MIN(expression): 返回表达式的最小值。
SELECT MIN(salary) FROM employees; -- 返回最小工资
4. 日期和时间函数
NOW(): 返回当前的日期和时间。
CURDATE(): 返回当前的日期。
CURTIME(): 返回当前的时间。
DATE_FORMAT(date, format): 按照指定的格式显示日期/时间值。
DATEDIFF(expr1, expr2): 返回两个日期之间的天数。
YEAR(date): 从日期中提取年份。
MONTH(date): 从日期中提取月份。
DAY(date): 从日期中提取日。
NOW(): 返回当前日期和时间。
SELECT NOW(); -- 返回当前的日期时间,如 '2024-09-12 10:00:00'
CURDATE(): 返回当前日期(不包括时间)。
SELECT CURDATE(); -- 返回当前日期,如 '2024-09-12'
CURTIME(): 返回当前时间(不包括日期)。
SELECT CURTIME(); -- 返回当前时间,如 '10:00:00'
DATE_ADD(date, INTERVAL n unit): 为指定日期添加指定时间间隔。
SELECT DATE_ADD('2024-09-12', INTERVAL 10 DAY); -- 返回 '2024-09-22'
DATEDIFF(date1, date2): 返回两个日期之间的天数差。
SELECT DATEDIFF('2024-09-12', '2024-09-01'); -- 返回 11
DATE_FORMAT(date, format): 将日期格式化为指定的字符串格式。
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); -- 返回 '2024-09-12 10:00:00'
5. 条件判断函数
IF(expr, v1, v2): 如果 expr 为真,则返回 v1,否则返回 v2。
CASE WHEN cond1 THEN result1 WHEN cond2 THEN result2 ... ELSE resultN END: 类似于编程语言中的 switch 语句,根据条件返回不同的结果。
- IF()
IF() 函数用于简单的条件判断,它类似于编程语言中的三元运算符。
语法:
IF(condition, value_if_true, value_if_false)
示例:
SELECT IF(10 > 5, 'True', 'False'); -- 返回 'True' - IFNULL()
IFNULL() 用于判断表达式是否为 NULL,如果是 NULL,则返回另一个值。
语法:
IFNULL(expression, alternate_value)
示例:
SELECT IFNULL(NULL, 'No Value'); -- 返回 'No Value' - NULLIF()
NULLIF() 比较两个值,如果相等则返回 NULL,否则返回第一个值。
语法:
NULLIF(expression1, expression2)
示例:
SELECT NULLIF(10, 10); -- 返回 NULL
SELECT NULLIF(10, 5); -- 返回 10 - CASE
CASE 表达式是 MySQL 中最灵活的条件判断工具,类似于 switch 语句。
有两种使用方式:简单 CASE 和 搜索 CASE。
简单 CASE
根据值匹配条件。
语法:
CASE value
WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE result_n
END
示例:
SELECT CASE 2
WHEN 1 THEN 'One'
WHEN 2 THEN 'Two'
ELSE 'Other'
END; -- 返回 'Two'
搜索 CASE
根据条件表达式进行判断。
语法:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE result_n
END
示例:
SELECT CASE
WHEN salary > 10000 THEN 'High Salary'
WHEN salary BETWEEN 5000 AND 10000 THEN 'Medium Salary'
ELSE 'Low Salary'
END AS salary_category
FROM employees; - COALESCE()
COALESCE() 函数返回第一个非 NULL 的值。它可以接收多个参数,并从左到右检查参数的值。
语法:
COALESCE(value1, value2, ..., value_n)
示例:
SELECT COALESCE(NULL, NULL, 'First Non-Null'); -- 返回 'First Non-Null' - GREATEST() 和 LEAST()
GREATEST() 返回多个值中的最大值。
SELECT GREATEST(1, 5, 3, 9, 2); -- 返回 9
LEAST() 返回多个值中的最小值。
SELECT LEAST(1, 5, 3, 9, 2); -- 返回 1 - IN()
IN() 用于检查某个值是否在一组值中。
语法:
expression IN (value1, value2, ..., value_n)
示例:
SELECT 5 IN (1, 2, 3, 5); -- 返回 1(表示 True) - BETWEEN
BETWEEN 用于检查某个值是否在给定的范围内(包括边界值)。
语法:
expression BETWEEN value1 AND value2
示例:
SELECT 10 BETWEEN 5 AND 15; -- 返回 1(表示 True) - EXISTS()
EXISTS() 用于检查子查询是否返回任何行,返回布尔值。
语法:
EXISTS(subquery)
示例:
SELECT EXISTS(SELECT 1 FROM users WHERE id = 1); -- 如果有 id 为 1 的用户,返回 1 - ISNULL()
ISNULL() 用于判断某个值是否为 NULL。
语法:
ISNULL(expression)
示例:
SELECT ISNULL(NULL); -- 返回 1(表示 True)
这些条件判断函数可以帮助构建更灵活的查询逻辑,尤其是在处理复杂数据分析或基于条件的查询时。
6. JSON 函数(MySQL 5.7+)
JSON_EXTRACT(json_doc, path, ...): 从 JSON 文档中提取数据。
JSON_SET(json_doc, path, val, ...): 在 JSON 文档中的指定路径设置值。
JSON_ARRAY([val, ...]): 创建一个 JSON 数组。
JSON_OBJECT(key, val, ...): 创建一个 JSON 对象。
MySQL 提供了一系列用于操作和查询 JSON 数据类型的函数,可以有效处理 JSON 文档。以下是常用的 MySQL JSON 函数:
- JSON_OBJECT()
生成一个 JSON 对象(即键值对的集合)。
语法:
JSON_OBJECT(key1, value1, key2, value2, ...)
示例:
SELECT JSON_OBJECT('name', 'John', 'age', 30);
-- 返回 {"name": "John", "age": 30} - JSON_ARRAY()
生成一个 JSON 数组。
语法:
JSON_ARRAY(value1, value2, ...)
示例:
SELECT JSON_ARRAY('apple', 'banana', 10, true);
-- 返回 ["apple", "banana", 10, true] - JSON_EXTRACT()
从 JSON 文档中提取指定路径的数据,类似于使用 . 或 -> 访问 JSON 的属性。
语法:
JSON_EXTRACT(json_doc, path)
示例:
SELECT JSON_EXTRACT('{"name": "John", "age": 30}', '$.name');
-- 返回 "John" - -> 和 ->> 操作符
-> 用于提取 JSON 对象的某个字段。
->> 用于提取 JSON 对象字段并直接返回纯文本(而非 JSON 格式)。
示例:
SELECT '{"name": "John", "age": 30}'->'$.name';
-- 返回 "John"
SELECT '{"name": "John", "age": 30}'->>' . n a m e ′ ; − − 返回 J o h n (去掉了引号) 5. J S O N S E T ( ) 更新 J S O N 文档中指定路径上的数据。语法: J S O N S E T ( j s o n d o c , p a t h , v a l u e ) 示例: S E L E C T J S O N S E T ( ′ " n a m e " : " J o h n " , " a g e " : 30 ′ , ′ .name'; -- 返回 John(去掉了引号) 5. JSON_SET() 更新 JSON 文档中指定路径上的数据。 语法: JSON_SET(json_doc, path, value) 示例: SELECT JSON_SET('{"name": "John", "age": 30}', ' .name′;−−返回John(去掉了引号)5.JSONSET()更新JSON文档中指定路径上的数据。语法:JSONSET(jsondoc,path,value)示例:SELECTJSONSET(′"name":"John","age":30′,′.age', 31);
-- 返回 {"name": "John", "age": 31}
- JSON_INSERT()
仅在路径不存在时插入数据,如果路径已经存在,则不进行任何操作。
语法:
JSON_INSERT(json_doc, path, value)
示例:
SELECT JSON_INSERT('{"name": "John"}', ' . a g e ′ , 30 ) ; − − 返回 " n a m e " : " J o h n " , " a g e " : 30 7. J S O N R E P L A C E ( ) 替换 J S O N 文档中指定路径的数据,如果路径不存在则不做任何操作。语法: J S O N R E P L A C E ( j s o n d o c , p a t h , v a l u e ) 示例: S E L E C T J S O N R E P L A C E ( ′ " n a m e " : " J o h n " , " a g e " : 30 ′ , ′ .age', 30); -- 返回 {"name": "John", "age": 30} 7. JSON_REPLACE() 替换 JSON 文档中指定路径的数据,如果路径不存在则不做任何操作。 语法: JSON_REPLACE(json_doc, path, value) 示例: SELECT JSON_REPLACE('{"name": "John", "age": 30}', ' .age′,30);−−返回"name":"John","age":307.JSONREPLACE()替换JSON文档中指定路径的数据,如果路径不存在则不做任何操作。语法:JSONREPLACE(jsondoc,path,value)示例:SELECTJSONREPLACE(′"name":"John","age":30′,′.age', 31);
-- 返回 {"name": "John", "age": 31}
- JSON_REMOVE()
删除 JSON 文档中指定路径上的键。
语法:
JSON_REMOVE(json_doc, path)
示例:
SELECT JSON_REMOVE('{"name": "John", "age": 30}', '$.age');
-- 返回 {"name": "John"}
- JSON_MERGE() 和 JSON_MERGE_PATCH()
JSON_MERGE():将多个 JSON 文档合并,重复的键会覆盖之前的值。
JSON_MERGE_PATCH():更加智能地合并 JSON 文档,遵循 JSON Merge Patch 标准。
语法:
JSON_MERGE(json_doc1, json_doc2, ...)
JSON_MERGE_PATCH(json_doc1, json_doc2, ...)
示例:
SELECT JSON_MERGE('{"name": "John"}', '{"age": 30}');
-- 返回 {"name": "John", "age": 30}
SELECT JSON_MERGE_PATCH('{"name": "John"}', '{"name": "Jane", "age": 30}');
-- 返回 {"name": "Jane", "age": 30}
- JSON_CONTAINS()
检查 JSON 文档中是否包含特定的值。
语法:
JSON_CONTAINS(json_doc, value, [path])
示例:
SELECT JSON_CONTAINS('{"name": "John", "age": 30}', '"John"', '$.name');
-- 返回 1(表示 true)
SELECT JSON_CONTAINS('[1, 2, 3]', '1');
-- 返回 1(表示 true)
- JSON_LENGTH()
返回 JSON 数组或对象的长度。
语法:
JSON_LENGTH(json_doc, [path])
示例:
SELECT JSON_LENGTH('{"name": "John", "age": 30}');
-- 返回 2
SELECT JSON_LENGTH('[1, 2, 3]');
-- 返回 3
- JSON_KEYS()
返回 JSON 对象中的所有键。
语法:
JSON_KEYS(json_doc, [path])
示例:
SELECT JSON_KEYS('{"name": "John", "age": 30}');
-- 返回 ["name", "age"]
- JSON_TYPE()
返回 JSON 值的数据类型。
语法:
JSON_TYPE(json_doc)
示例:
SELECT JSON_TYPE('{"name": "John"}');
-- 返回 OBJECT
- JSON_UNQUOTE()
去除 JSON 值的引号,返回原始字符串。
语法:
JSON_UNQUOTE(json_val)
示例:
SELECT JSON_UNQUOTE('{"name": "John"}->" . n a m e " ′ ) ; − − 返回 J o h n 15. J S O N A R R A Y A P P E N D ( ) 将新值附加到 J S O N 数组中。语法: J S O N A R R A Y A P P E N D ( j s o n d o c , p a t h , v a l u e ) 示例: S E L E C T J S O N A R R A Y A P P E N D ( ′ [ " a p p l e " , " b a n a n a " ] ′ , ′ .name"'); -- 返回 John 15. JSON_ARRAY_APPEND() 将新值附加到 JSON 数组中。 语法: JSON_ARRAY_APPEND(json_doc, path, value) 示例: SELECT JSON_ARRAY_APPEND('["apple", "banana"]', ' .name"′);−−返回John15.JSONARRAYAPPEND()将新值附加到JSON数组中。语法:JSONARRAYAPPEND(jsondoc,path,value)示例:SELECTJSONARRAYAPPEND(′["apple","banana"]′,′', 'orange');
-- 返回 ["apple", "banana", "orange"]
这些 JSON 函数使 MySQL 更加方便地处理复杂的 JSON 数据类型,适用于存储和操作灵活结构化的数据。
7. 加密和压缩函数
MD5(str): 返回字符串的 MD5 加密结果。
SHA1(str): 返回字符串的 SHA-1 加密结果。
COMPRESS(string): 压缩一个字符串。
UNCOMPRESS(string): 对压缩过的字符串进行解压缩。
这只是 MySQL 中众多函数的一小部分示例。具体使用时,可以根据 MySQL 的官方文档来选择适合的函数。MySQL 提供了许多内置函数,常用于处理字符串、日期、数学运算以及聚合操作等。以下是一些常用的 MySQL 函数: