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

MySQL-自定义函数

自定义函数

函数的作用

mysql数据库中已经提供了内置的函数,比如:sum,avg,concat等等,方便我们日常的使用,当需要时mysql支持定义自定义的函数,方便与我们对于需用复用的功能进行封装。

基本语法 

delimiter $

create function 函数名(参数列表)

returns 返回值类型

begin

   函数体

end $

delimiter ;

注意:与存储过程不同,存储过程是没有返回值的,如果需要返回则需要使用out或inout类型的参数,函数是有返回值的

一个自定义函数的示例:

delimiter $

create function helloword()

returns varchar(20)

begin

    return 'hello word';

end $

delimiter;

 

调用:

 

delimiter $

create function dateformat(fdate datetime)

returns varchar(50)

begin

    declare datestr varchar(50) default '';

set datestr = date_format(fdate,'%Y年%M月%H时%i分%s秒');

return datestr;

end $

delimiter ;

 

调用

注意:

  • 函数只能返回一个值,不能返回结果集
  • 一般函数在sql语句中调用
  • 需要传入参数,则使用函数名(参数)的方式调用
  • 查看函数创建语句:show create function 函数名;
  • 查看所有函数:show function status [like 'pattern']
  • 函数的修改只能修改一些如comment的选项,不能修改内部的sql语句和参数列表

删除函数:

  • drop function 函数名;

自定义函数示例

示例一

功能描述:下面是一个更复杂且常用的 MySQL 自定义函数示例,示范如何创建一个函数来计算文本字符串的字数。

自定义函数如下:

 

DELIMITER //CREATE FUNCTION word_count(TEXT VARCHAR(255)) RETURNS INT
BEGINDECLARE word_count INT DEFAULT 0;-- 如果输入字符串为空,返回 0IF TEXT IS NULL OR TRIM(TEXT) = '' THENRETURN 0;END IF;-- 计算单词数,使用空格作为分隔符SET word_count = LENGTH(TRIM(TEXT)) - LENGTH(REPLACE(TRIM(TEXT), ' ', '')) + 1;-- 如果字符串只有空格,返回 0IF word_count = 1 AND TRIM(TEXT) = '' THENRETURN 0;END IF;RETURN word_count;
END //DELIMITER ;

测试:

SELECT word_count('Hello, how are you today?') AS COUNT;

示例二

功能描述:计算给定日期的周数

 

DELIMITER //CREATE FUNCTION week_of_year(input_date DATE) RETURNS INT
BEGINDECLARE week_number INT;-- 如果输入日期为空,返回 0IF input_date IS NULL THENRETURN 0;END IF;-- 使用 WEEK 函数计算周数,模式 1 表示周从星期一开始SET week_number = WEEK(input_date, 1);RETURN week_number;
END //DELIMITER ;

测试 

SELECT week_of_year('2024-01-15') AS week_number;
http://www.xdnf.cn/news/1719.html

相关文章:

  • 济南国网数字化培训班学习笔记-第二组-2节-输电线路施工及质量
  • Spring MVC HandlerAdapter 的作用是什么? 为什么 DispatcherServlet 不直接调用 Controller 方法?
  • Redis Cluster 使用 CRC16 算法实现 Slot 槽位分片的核心细节
  • VocalPitchMonitor汉化版:专业音调检测,助力歌唱练习
  • 从零开始在Win上添加一块QEMU开发板(四)实现简单USART
  • Vue 2 的响应式 API 和 Vue 3 的组合式 API 的详细对比,从核心机制、使用方式、代码示例及优缺点展开
  • C++ 类与对象(上):从基础定义到内存布局的深度解析
  • PowerToys:让你的windows拥有更丝滑的体验
  • java多线程(3.0)
  • Redis从入门到上手-全面讲解redis使用.
  • 【数据结构】_树和二叉树
  • VMware与Docker:虚拟化技术的双轨演进与融合实践
  • 【前端】【面试】在前端开发中,如何实现图片的渐进式加载,以及这样做的好处是什么?
  • MMsegmentation第一弹-(认识与安装)
  • 《无尽的尽头》今日开播 刘家祎大胆演绎林磊儿的“另一面”
  • python速成
  • 项目《基于Linux下的mybash命令解释器》(二)
  • STM32F407使用ESP8266实现阿里云OTA(中)
  • 第9章 多模态大语言模型
  • Android 智能家居开发:串口是什么,为什么android版本都比较低?粘包半包的原因以及处理思路,缓冲区处理,以及超时清空缓冲区....
  • 操作系统进程管理笔记
  • python 函数与模块
  • 项目中的政治斗争如何化解
  • 如何在 Windows上安装 Python 3.6.5?
  • Python 中 `r` 前缀:字符串处理的“防转义利器”
  • 第十三届蓝桥杯 2022 C/C++组 修剪灌木
  • Blender插件 三维花草植物自然景观生成器 Geo-Scatter 5.4.0
  • MODIS(MOD11A2)中国2000-2024年度平均地表温度(LST)数据集
  • AI下半场,出现了“超体”时刻
  • ctfhow——web入门214~218(时间盲注开始)