当前位置: 首页 > 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.dtcms.com/a/325837.html

相关文章:

  • 【PyTorch学习笔记 - 01】 Tensors(张量)
  • STM32 HAL库驱动W25QXX Flash
  • es基本概念-自学笔记
  • 嵌入式硬件中MOS管图形详解
  • Unity笔记(五)知识补充——场景切换、退出游戏、鼠标隐藏锁定、随机数、委托
  • Mini-Omni: Language Models Can Hear, Talk While Thinking in Streaming
  • 数据库的基本操作(约束与DQL查询)
  • 分治-归并-912.排序数组-力扣(LeetCode)
  • 京东科技集团寻求稳定币链上活动规划师
  • 150V降压芯片DCDC150V100V80V降压12V5V1.5A车载仪表恒压驱动H6203L惠洋科技
  • shape转换ersi json 修改增加多部件要素处理和空洞处理
  • 安卓\android程序开发之基于 Android 的校园报修系统的设计与实现
  • Android.mk教程
  • RFID系统:物联网时代的数字化管理中枢
  • 算法训练营day45 动态规划⑫ 115.不同的子序列、583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结篇
  • Java -- 集合 --Collection接口和常用的方法
  • (3万字详解)Linux系统学习:深入了解Linux系统开发工具
  • leetcode 15 三数之和
  • 【《数字货币量化交易:Linux下策略回测平台的搭建》】
  • 2025-2026 专升本论文写作【八项规范】
  • [202404-B]画矩形
  • 微信小程序常用 API
  • Arcpy-重采样记录
  • B站直播, 拼接4个窗口,能否实现
  • 从源码看 Coze:Agent 的三大支柱是如何构建的?
  • 【优化】图片批量合并为word
  • 嵌入式学习day24
  • MySQL的索引(索引的数据结构-B+树索引):
  • P2865 [USACO06NOV] Roadblocks G
  • 音视频学习(五十三):音频重采样