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

相关推荐
superman超哥1 小时前
04 深入 Oracle 并发世界:MVCC、锁、闩锁、事务隔离与并发性能优化的探索
数据库·oracle·性能优化·dba
用户8007165452001 小时前
HTAP数据库国产化改造技术可行性方案分析
数据库
engchina2 小时前
Neo4j 和 Python 初学者指南:如何使用可选关系匹配优化 Cypher 查询
数据库·python·neo4j
engchina2 小时前
使用 Cypher 查询语言在 Neo4j 中查找最短路径
数据库·neo4j
尘浮生2 小时前
Java项目实战II基于Spring Boot的光影视频平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·maven·intellij-idea
威哥爱编程2 小时前
SQL Server 数据太多如何优化
数据库·sql·sqlserver
小华同学ai2 小时前
AJ-Report:一款开源且非常强大的数据可视化大屏和报表工具
数据库·信息可视化·开源
Acrelhuang2 小时前
安科瑞5G基站直流叠光监控系统-安科瑞黄安南
大数据·数据库·数据仓库·物联网
十叶知秋3 小时前
【jmeter】jmeter的线程组功能的详细介绍
数据库·jmeter·性能测试
瓜牛_gn5 小时前
mysql特性
数据库·mysql