MySQL常用的函数

文章目录

    • [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 语句,根据条件返回不同的结果。

  1. IF()
    IF() 函数用于简单的条件判断,它类似于编程语言中的三元运算符。
    语法:
    IF(condition, value_if_true, value_if_false)
    示例:
    SELECT IF(10 > 5, 'True', 'False'); -- 返回 'True'
  2. IFNULL()
    IFNULL() 用于判断表达式是否为 NULL,如果是 NULL,则返回另一个值。
    语法:
    IFNULL(expression, alternate_value)
    示例:
    SELECT IFNULL(NULL, 'No Value'); -- 返回 'No Value'
  3. NULLIF()
    NULLIF() 比较两个值,如果相等则返回 NULL,否则返回第一个值。
    语法:
    NULLIF(expression1, expression2)
    示例:
    SELECT NULLIF(10, 10); -- 返回 NULL
    SELECT NULLIF(10, 5); -- 返回 10
  4. 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;
  5. COALESCE()
    COALESCE() 函数返回第一个非 NULL 的值。它可以接收多个参数,并从左到右检查参数的值。
    语法:
    COALESCE(value1, value2, ..., value_n)
    示例:
    SELECT COALESCE(NULL, NULL, 'First Non-Null'); -- 返回 'First Non-Null'
  6. GREATEST() 和 LEAST()
    GREATEST() 返回多个值中的最大值。
    SELECT GREATEST(1, 5, 3, 9, 2); -- 返回 9
    LEAST() 返回多个值中的最小值。
    SELECT LEAST(1, 5, 3, 9, 2); -- 返回 1
  7. IN()
    IN() 用于检查某个值是否在一组值中。
    语法:
    expression IN (value1, value2, ..., value_n)
    示例:
    SELECT 5 IN (1, 2, 3, 5); -- 返回 1(表示 True)
  8. BETWEEN
    BETWEEN 用于检查某个值是否在给定的范围内(包括边界值)。
    语法:
    expression BETWEEN value1 AND value2
    示例:
    SELECT 10 BETWEEN 5 AND 15; -- 返回 1(表示 True)
  9. EXISTS()
    EXISTS() 用于检查子查询是否返回任何行,返回布尔值。
    语法:
    EXISTS(subquery)
    示例:
    SELECT EXISTS(SELECT 1 FROM users WHERE id = 1); -- 如果有 id 为 1 的用户,返回 1
  10. 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 函数:

  1. JSON_OBJECT()
    生成一个 JSON 对象(即键值对的集合)。
    语法:
    JSON_OBJECT(key1, value1, key2, value2, ...)
    示例:
    SELECT JSON_OBJECT('name', 'John', 'age', 30);
    -- 返回 {"name": "John", "age": 30}
  2. JSON_ARRAY()
    生成一个 JSON 数组。
    语法:
    JSON_ARRAY(value1, value2, ...)
    示例:
    SELECT JSON_ARRAY('apple', 'banana', 10, true);
    -- 返回 ["apple", "banana", 10, true]
  3. JSON_EXTRACT()
    从 JSON 文档中提取指定路径的数据,类似于使用 . 或 -> 访问 JSON 的属性。
    语法:
    JSON_EXTRACT(json_doc, path)
    示例:
    SELECT JSON_EXTRACT('{"name": "John", "age": 30}', '$.name');
    -- 返回 "John"
  4. -> 和 ->> 操作符
    -> 用于提取 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}

  1. 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}

  1. JSON_REMOVE()

删除 JSON 文档中指定路径上的键。

语法:

JSON_REMOVE(json_doc, path)

示例:

SELECT JSON_REMOVE('{"name": "John", "age": 30}', '$.age');

-- 返回 {"name": "John"}

  1. 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}

  1. 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)

  1. JSON_LENGTH()

返回 JSON 数组或对象的长度。

语法:

JSON_LENGTH(json_doc, [path])

示例:

SELECT JSON_LENGTH('{"name": "John", "age": 30}');

-- 返回 2

SELECT JSON_LENGTH('[1, 2, 3]');

-- 返回 3

  1. JSON_KEYS()

返回 JSON 对象中的所有键。

语法:

JSON_KEYS(json_doc, [path])

示例:

SELECT JSON_KEYS('{"name": "John", "age": 30}');

-- 返回 ["name", "age"]

  1. JSON_TYPE()

返回 JSON 值的数据类型。

语法:

JSON_TYPE(json_doc)

示例:

SELECT JSON_TYPE('{"name": "John"}');

-- 返回 OBJECT

  1. 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 函数:

相关推荐
广州智造2 小时前
OptiStruct实例:3D实体转子分析
数据库·人工智能·算法·机器学习·数学建模·3d·性能优化
技术宝哥5 小时前
Redis(2):Redis + Lua为什么可以实现原子性
数据库·redis·lua
学地理的小胖砸6 小时前
【Python 操作 MySQL 数据库】
数据库·python·mysql
dddaidai1237 小时前
Redis解析
数据库·redis·缓存
数据库幼崽7 小时前
MySQL 8.0 OCP 1Z0-908 121-130题
数据库·mysql·ocp
Amctwd7 小时前
【SQL】如何在 SQL 中统计结构化字符串的特征频率
数据库·sql
betazhou7 小时前
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
linux·数据库·mysql·oracle·ogg
lyrhhhhhhhh8 小时前
Spring 框架 JDBC 模板技术详解
java·数据库·spring
喝醉的小喵9 小时前
【mysql】并发 Insert 的死锁问题 第二弹
数据库·后端·mysql·死锁
付出不多10 小时前
Linux——mysql主从复制与读写分离
数据库·mysql