当前位置: 首页 > news >正文

MySQL 函数

在数据库操作中,我们经常需要对数据进行各种处理,比如提取字符串中的部分内容、计算数值的总和、获取当前日期等。这时候,MySQL 函数就像一位得力助手,能帮我们高效地完成这些任务。

一、MySQL 函数是什么

MySQL 函数是一种预先定义好的操作,它接收零个或多个输入参数,经过内部的逻辑处理后,返回一个结果。这些函数被集成在 MySQL 数据库管理系统中,能够极大地简化我们对数据的查询、计算和转换操作。

从功能角度看,MySQL 函数可以分为内置函数和自定义函数。内置函数由 MySQL 官方提供,涵盖了数据处理的方方面面;自定义函数则是用户根据自身业务需求编写的函数,能满足特定场景下的数据处理要求。

二、常用 MySQL 函数类型及示例

(一)字符串函数

字符串函数主要用于对字符串类型的数据进行处理,比如连接、截取、转换大小写等。

  1. CONCAT (str1, str2, ...):用于连接多个字符串。若其中有一个参数为 NULL,则返回 NULL。

示例:SELECT CONCAT (' 姓名:', ' 张三 ', ',年龄:', '25') AS result;

执行结果为:“姓名:张三,年龄:25”。

SELECT CONCAT ('a', NULL, 'b') AS result;

执行结果为:NULL。

  1. SUBSTRING (str, pos, len):从指定位置开始截取指定长度的字符串,pos 表示起始位置(从 1 开始计数),len 表示截取的长度。若 len 省略,则截取从 pos 到字符串末尾的所有字符;若 pos 为负数,则从字符串末尾开始计数。

示例:SELECT SUBSTRING ('Hello World', 7, 5) AS result;

执行结果为:“World”。

SELECT SUBSTRING ('Hello World', -5) AS result;

执行结果为:“World”。

  1. UPPER (str) 和 LOWER (str):分别用于将字符串转换为大写和小写。

示例:SELECT UPPER ('hello') AS upper_result, LOWER ('HELLO') AS lower_result;

执行结果为:“HELLO” 和 “hello”。

  1. TRIM ([{BOTH | LEADING | TRAILING} [remstr] FROM] str):去除字符串首尾的指定字符,默认去除空格。BOTH 表示去除首尾,LEADING 表示去除开头,TRAILING 表示去除结尾。

示例:SELECT TRIM (' Hello ') AS result;

执行结果为:“Hello”。

SELECT TRIM (LEADING 'x' FROM 'xxHello') AS result;

执行结果为:“Hello”。

  1. LENGTH (str):返回字符串的长度,以字节为单位。

示例:SELECT LENGTH ('Hello') AS result;

执行结果为:5。(在 UTF-8 编码下,一个英文字符占 1 个字节)

(二)数值函数

数值函数主要用于对数值类型的数据进行计算和处理。

  1. SUM (expr):计算指定列的总和,忽略 NULL 值。

示例:假设有一个学生成绩表 score,其中有一列是 math_score,执行 SELECT SUM (math_score) AS total_math_score FROM score; 可得到所有学生数学成绩的总和。

  1. AVG (expr):计算指定列的平均值,忽略 NULL 值。

示例:SELECT AVG (math_score) AS avg_math_score FROM score; 可得到学生数学成绩的平均值。

  1. MAX (expr) 和 MIN (expr):分别用于获取指定列的最大值和最小值,忽略 NULL 值。

示例:SELECT MAX (math_score) AS max_math_score, MIN (math_score) AS min_math_score FROM score; 可得到数学成绩的最高分和最低分。

  1. ROUND (x, d):将数值 x 四舍五入保留 d 位小数,d 默认值为 0。

示例:SELECT ROUND (3.1415, 2) AS result;

执行结果为:3.14。

SELECT ROUND (3.5) AS result;

执行结果为:4。

  1. MOD (n, m):返回 n 除以 m 的余数。

示例:SELECT MOD (10, 3) AS result;

执行结果为:1。

(三)日期时间函数

日期时间函数用于处理日期和时间类型的数据。

  1. NOW ():返回当前的日期和时间,格式为 'YYYY-MM-DD HH:MM:SS'。

示例:SELECT NOW () AS current_datetime; 执行结果类似 “2025-08-11 10:30:45”。

  1. CURDATE () 和 CURTIME ():CURDATE () 返回当前日期,格式为 'YYYY-MM-DD';CURTIME () 返回当前时间,格式为 'HH:MM:SS'。

示例:SELECT CURDATE () AS current_date, CURTIME () AS current_time;

执行结果类似 “2025-08-11” 和 “10:35:20”。

  1. DATE_FORMAT (date, format):将日期按照指定的格式进行转换。常用的格式符有:% Y(四位年份)、% m(两位月份)、% d(两位日期)、% H(24 小时制小时)、% i(分钟)、% s(秒)。

示例:SELECT DATE_FORMAT (NOW (), '% Y 年 % m 月 % d 日 % H:% i:% s') AS formatted_datetime;

执行结果为 “2025 年 08 月 11 日 10:40:15”。

  1. DATEDIFF (date1, date2):计算两个日期之间的天数差,结果为 date1 - date2。

示例:SELECT DATEDIFF ('2025-08-15', '2025-08-11') AS day_diff; 执行结果为 4。

SELECT DATEDIFF ('2025-08-10', '2025-08-11') AS day_diff; 执行结果为 - 1。

  1. ADDDATE (date, INTERVAL expr unit):给日期添加指定的时间间隔。

示例:SELECT ADDDATE ('2025-08-11', INTERVAL 3 DAY) AS result;

执行结果为 “2025-08-14”。

SELECT ADDDATE ('2025-08-11', INTERVAL 1 MONTH) AS result;

执行结果为 “2025-09-11”。

(四)聚合函数

聚合函数用于对一组数据进行汇总计算,通常与 GROUP BY 子句一起使用。

  1. COUNT (expr):计算指定列的非 NULL 值的数量。COUNT () 则计算所有行数,包括 NULL 值。

示例:SELECT COUNT (math_score) AS count_math FROM score;(计算 math_score 列非 NULL 值的数量)

SELECT COUNT () AS total_rows FROM score;(计算表中所有行数)

  1. GROUP_CONCAT (expr):将分组后的指定列的值连接成一个字符串。

示例:假设有表 student,包含 class(班级)和 name(姓名)列,执行 SELECT class, GROUP_CONCAT (name) AS students FROM student GROUP BY class; 可得到每个班级的学生姓名列表,用逗号分隔。

三、自定义函数

除了 MySQL 内置的函数外,我们还可以根据自己的需求创建自定义函数。自定义函数可以封装特定的业务逻辑,提高代码的复用性。

(一)创建自定义函数的语法

CREATE FUNCTION 函数名(参数1 数据类型 [, 参数2 数据类型, ...])RETURNS 返回值数据类型[DETERMINISTIC | NOT DETERMINISTIC][COMMENT '函数注释']BEGIN-- 函数体,包含具体的逻辑处理RETURN 返回值;END
  • DETERMINISTIC:表示函数是确定性的,即相同的输入会得到相同的输出;NOT DETERMINISTIC 则表示函数是非确定性的,默认值为 NOT DETERMINISTIC。
  • COMMENT:用于对函数进行说明,方便后续维护。

(二)示例

1.计算两个数的乘积

CREATE FUNCTION multiply(a INT, b INT)RETURNS INTDETERMINISTICCOMMENT '计算两个整数的乘积'BEGINDECLARE result INT;SET result = a * b;RETURN result;END

调用该函数:SELECT multiply (3, 4) AS product; 执行结果为 12。

2.根据学生分数判断等级(90 及以上为 A,80-89 为 B,70-79 为 C,60-69 为 D,60 以下为 E)

CREATE FUNCTION get_grade(score INT)RETURNS CHAR(1)DETERMINISTICCOMMENT '根据分数返回等级'BEGINDECLARE grade CHAR(1);IF score >= 90 THENSET grade = 'A';ELSEIF score >= 80 THENSET grade = 'B';ELSEIF score >= 70 THENSET grade = 'C';ELSEIF score >= 60 THENSET grade = 'D';ELSESET grade = 'E';END IF;RETURN grade;END

调用该函数:SELECT get_grade (85) AS grade; 执行结果为 'B'。

(三)自定义函数的修改与删除

  1. 修改函数:MySQL 中不能直接修改函数的定义,若要修改,需先删除函数,再重新创建。
  1. 删除函数:
DROP FUNCTION [IF EXISTS] 函数名;

示例:DROP FUNCTION IF EXISTS multiply;(删除名为 multiply 的函数,若存在)

四、使用 MySQL 函数的注意事项

  1. 函数的参数类型和数量必须与函数定义一致,否则会出现错误。例如,调用需要两个参数的函数时只传递一个参数,会导致执行失败。
  2. 不同的 MySQL 版本可能对函数的支持有所差异,在使用时要注意兼容性。比如某些新函数在旧版本中可能无法使用。
  3. 对于复杂的逻辑处理,自定义函数虽然方便,但也要注意其性能,避免过度使用导致查询效率下降。可以通过执行计划分析函数对查询性能的影响。
  4. 自定义函数需要特定的权限才能创建、修改和删除。创建函数需要 CREATE ROUTINE 权限,修改或删除函数需要 ALTER ROUTINE 权限,执行函数需要 EXECUTE 权限。
  5. 避免在函数中使用过多的复杂逻辑和大量的数据操作,以免增加函数的执行时间,影响整体查询效率。
  6. 函数与存储过程的区别:函数必须有返回值,且只能返回一个值;存储过程可以没有返回值,也可以通过 OUT 参数返回多个值。函数可以在 SELECT 语句中使用,而存储过程不能。

http://www.xdnf.cn/news/1282555.html

相关文章:

  • 达梦数据库慢SQL日志收集和分析
  • 【排序算法】⑥快速排序:Hoare、挖坑法、前后指针法
  • 算法训练营DAY57 第十一章:图论part07
  • 数集相等定义凸显解析几何几百年重大错误:将无穷多各异点集误为同一集
  • 深度学习和神经网络最基础的mlp,从最基础的开始讲
  • 数据大集网:精准获客新引擎,助力中小企业突破推广困局
  • MATLAB实现遗传算法求解路网路由问题
  • R语言机器学习算法实战系列(二十七)LASSO 与 Adaptive LASSO 在特征选择中的比较与应用
  • 【Leetcode】随笔
  • 深入浅出设计模式——行为型模式之观察者模式 Observer
  • Note4:Self-Attention
  • 能力评估:如何系统评估你的技能和经验
  • @ContextConfiguration
  • 嵌入式学习的第四十八天-中断+OCP原则
  • 矩阵游戏(二分图最大匹配)
  • 新人该如何将不同的HTML、CSS、Javascript等文件转化为Vue3文件架构
  • 大数据量下分页查询性能优化实践(SpringBoot+MyBatis-Plus)
  • Linux操作系统从入门到实战(十九)进程状态
  • HyperMesh许可使用监控
  • 从“目标烂尾”到“100%交付”:谷歌OKR追踪系统如何用“透明化+强问责”打造职场责任闭环
  • MD5:理解MD5 / MD5核心特性 / MD5 在前端开发中的常见用途 / 在线生成MD5 / js-md5
  • Spring Boot 2.6.0+ 循环依赖问题及解决方案
  • Android 16 的用户和用户组定义
  • JS深拷贝 浅拷贝、CSS垂直水平居中
  • 计算机网络---交换机
  • 算法73. 矩阵置零
  • 正则表达式:文本模式的数学语言与编程工具
  • ​费马小定理​
  • 关于微信小程序的笔记
  • 简单Modules 的配置与管理,灵活应对多版本软件环境的需求。