当前位置:

首页 > 编程开发 > MySQL内置函数和自定义函数怎么使用

MySQL内置函数和自定义函数怎么使用

前言:函数分为两类:系统函数和自定义函数使用函数:select函数名(参数列表);1、内置函数1.1、字符串函数函数名说明char_length判断字符串的字符数length判断字符串的字节数,与字符集有关concat连接字符串insrt检查字符是否在目标字符串中,存在返回其位置,不存在返回0lcase全部小写ltrim消除左边的空格left(str,length)左侧开始截取字符串,直到指定位置right(str,length)右侧开始截取字符串,直到指定位置mid从中间指定位置开始截取,如果不指定截取

    前言:

    函数分为两类:系统函数和自定义函数

    使用函数:

    select 函数名(参数列表);

    1、内置函数

    1.1、字符串函数

    函数名说明
    char_length判断字符串的字符数
    length判断字符串的字节数,与字符集有关
    concat连接字符串
    insrt检查字符是否在目标字符串中,存在返回其位置,不存在返回 0
    lcase全部小写
    ltrim消除左边的空格
    left(str, length)左侧开始截取字符串,直到指定位置
    right(str, length)右侧开始截取字符串,直到指定位置
    mid从中间指定位置开始截取,如果不指定截取长度,直接到最后
    substring(str, index, [length])从指定位置开始,指定截取长度
    substring_index(str, delim, count)按照关键字截取

    示例:

    select char_length('你好中国'); // 4
    select length('你好中国'); // 12
    select length('hello'); // 5
    select char_length('hello'); // 5
    select concat('你好', '中国'); // 你好中国
    -- 下标从 1 开始
    select instr('你好中国', '中国'); // 3
    select instr('你好中国', '我'); // 0
    select lcase('aBcd'); // abcd
    select left('aBcd', 2); // aB
    select right('abcdef', 2); // ef
    select substring('abcdef', 2, 3); // bcd
    select substring('abcdef', -2, 3); // ef
    select ltrim(' abc d '); // abc d
    select mid('你好中国', 3); // 中国
    select substring_index('www.baidu.com', '.', 2); // www.baidu
    select substring_index('www.baidu.com', '.', -2); // baidu.com

    1.2、时间函数

    函数名说明
    now()返回当前时间,日期 时间
    curdate()当前日期
    curtime()当前时间
    datediff()判断两个日期之间的天数之差,日期使用字符串格式(用引号)
    date_add(日期, interval 时间数字 type)时间增加(type:
    unix_timestamp()获取时间戳
    from_unixtime()将指定时间戳转换成对应的日期时间格式

    示例:

    select now(); // 2022-04-10 22:05:38
    select curdate(); // 2022-04-10
    select curtime(); // 22:05:51
    select datediff('2022-01-09', '2022-01-01'); // 8
    select date_add('2000-10-01', interval 10 day); // 2000-10-11
    select unix_timestamp(); // 1649599799
    select from_unixtime(1649599799); // 2022-04-10 22:09:59

    1.3、数学函数

    函数名说明
    abs绝对值
    ceiling向上取整
    floor向下取整
    pow指数
    rand随机数(0-1)
    round四舍五入

    示例:

    select abs(-1); // 1
    select ceiling(1.1); // 2
    select floor(1.9); // 1
    select pow(2, 4); // 16
    select rand(); // 0.2616088308967732
    select round(1.5); // 2

    1.4、其他函数

    函数名说明
    md5()MD5
    version()版本号
    database()显示当前所在数据库
    uuid()生成一个唯一标识符,全局唯一

    示例:

    select md5('abc'); // 900150983cd24fb0d6963f7d28e17f72
    select version(); // 8.0.16
    select database(); // mydatabase
    select uuid(); // c44a06a2-b8d8-11ec-a53c-504259f9d746

    2、自定义函数

    mysql一旦见到分号结束符,就会开始执行

    修改语句结束符

    基本语法:

    delimiter 符号;

    2.1、创建函数

    基本语法:

    -- 修改语句结束符
    delimiter $$;
    create function 函数名(形参) returns 返回值类型
    begin
        // 函数体
        return 返回值数据;
    end
    语句结束符
    -- 将语句结束符修改回来
    delimiter ;

    示例:

    -- 修改语句结束符
    delimiter $$
    create function my_func1() returns int
    begin
        return 10;
    end
    -- 结束
    $$
    -- 将语句结束符改回来
    delimiter ;

    如果只有一条语句,可以省略begin 和 end

    -- 最简单的函数
    create function foo() returns int
    return 10;

    为函数的形参指定数据类型

    基本语法:

    形参 数据类型

    示例:

    create function my_func2(a int, b int) returns int
    return a * b;

    2.2、查看函数

    基本语法:

    show function status [like 'pattern'];

    示例:

    -- 查看所有函数
    show function status\G
    -- 查看单个函数
    mysql> show function status like 'foo'\G
    *************************** 1. row ***************************
                      Db: mydatabase
                    Name: foo
                    Type: FUNCTION
                 Definer: root@localhost
                Modified: 2022-04-10 22:34:06
                 Created: 2022-04-10 22:34:06
           Security_type: DEFINER
                 Comment:
    character_set_client: utf8mb4
    collation_connection: utf8mb4_general_ci
      Database Collation: utf8mb4_general_ci
    1 row in set (0.00 sec)
    -- 查看函数创建语句
    mysql> show create function foo\G
    *************************** 1. row ***************************
                Function: foo
                sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
         Create Function: CREATE DEFINER=`root`@`localhost` FUNCTION `foo`() RETURNS int(11)
    return 10
    character_set_client: utf8mb4
    collation_connection: utf8mb4_general_ci
      Database Collation: utf8mb4_general_ci
    1 row in set (0.01 sec)

    2.3、调用函数

    基本语法

    select 函数名(实参列表);

    示例:

    mysql> select foo();
    +-------+
    | foo() |
    +-------+
    |    10 |
    +-------+
    mysql> select my_func2(2, 3);
    +----------------+
    | my_func2(2, 3) |
    +----------------+
    |              6 |
    +----------------+

    2.4、删除函数

    基本语法

    drop function 函数名;

    示例:

    drop function my_func1;

    2.5、注意事项

    • 自定义函数属于用户级别,只有当前客户端对应的数据库中可以使用

    • 可以在不同数据库下看到函数,但是不可以调用

    • 自定义函数通常是为了将多行代码集合到一起解决一个重复性的问题

    4.函数必须规范返回值,那么在函数内部不能使用select指令,select一旦执行就会的到一个结果集 result set;

    可以使用给变量赋值语句

    select 字段 into @变量;

    3、函数流程结构案例

    需求:

    从1开始,直到用户传入的对应的值位置,自动求和,凡是5的倍数都不要

    设计:

    • 创建函数

    • 需要一个形参,确定要累加到什么位置

    • 需要定义一个变量来保存对应的结果

    • 内容部需要一个循环来实现迭代累加

    • 循环内部需要进行条件判断控制,5的倍数

    定义函数:

    -- 创建一个自动求和的函数
    -- 修改语句结束符
    delimiter $$
    -- 创建函数
    create function my_sum(end_value int) returns int
    begin
        -- 声明局部变量
        declare res int default 0;
        declare i int default 0;
        -- 循环处理
        mywhile: while i <= end_value do
            -- mysql中没有++
            set i = i + 1; 
            --  判断当前数据是否合理
            if i % 5 = 0 then
                iterate mywhile;
            end if;
            -- 修改变量,累加
            set res = res + i;
        end while;
        -- 返回值
        return res;
    end
    
    -- 结束
    $$
    -- 修改语句结束符
    delimiter ;

    调用函数:

    -- 实参个数必须等于形参个数
    select my_sum(10);
    本文内容来源于互联网,如有侵权请联系删除。
    作者最新文章
    编程开发
    相关文章 更多
    using namespace 使用中遇到的问题怎么解决
    using namespace 使用中遇到的问题怎么解决

    命名空间的基本概念与常见引入问题在C++等编程语言中,命名空间(namespace)是一种将代码标识符(如变量、函数、类名)封装在特定名称下的机制,其主要目的是避免命名冲突,尤其是在大型项目或使用多个第三方库时。使用“using namespace”指令可以将指定命名空间中的所有名称引入当前作用域,

    c语言函数递归 实操经验总结:这些技巧很实用
    c语言函数递归 实操经验总结:这些技巧很实用

    理解递归的基本原理在C语言中,递归是一种函数调用自身的编程技术。要掌握它,首先需要理解其核心思想:将一个复杂的大问题,分解为一个或几个与原问题相似但规模更小的子问题,直到子问题足够简单,可以直接求解。这个过程通常包含两个关键部分:递归出口和递归体。递归出口定义了问题何时不再继续分解,即最简单、可直接

    c语言函数递归 怎么选?常见方案对比分析
    c语言函数递归 怎么选?常见方案对比分析

    递归函数的基本概念与适用场景在C语言编程中,递归是一种函数调用自身的编程技巧。它并非适用于所有问题,但在处理某些具有自相似结构的问题时,能提供极其清晰和优雅的解决方案。递归的核心思想是将一个大规模问题分解为一个或多个同类型但规模更小的子问题,直到子问题简单到可以直接求解。典型的适用场景包括树形结构的

    Objective-C 内存管理入门:从 alloc 到 dealloc 的生命周期详解
    Objective-C 内存管理入门:从 alloc 到 dealloc 的生命周期详解

    理解内存管理的基石在Objective-C的编程世界中,内存管理是开发者必须掌握的核心技能之一。它直接关系到应用的性能、稳定性与资源利用效率。与一些采用自动垃圾回收机制的语言不同,Objective-C在很长一段时间里,依赖一套基于引用计数的、需要开发者部分介入的管理规则。这套规则的核心思想是明确的

    如何正确使用 dealloc 以避免 iOS 应用中的内存泄漏
    如何正确使用 dealloc 以避免 iOS 应用中的内存泄漏

    理解 dealloc 的角色与时机在 iOS 应用开发中,内存管理是保障应用性能与稳定性的基石。dealloc 方法是 Objective-C 中对象生命周期结束时的关键回调,它标志着对象即将被系统回收内存。正确理解其触发时机至关重要:当一个对象的引用计数降为零时,运行时系统会自动调用该对象的 de

    深入理解 Objective-C 中的 dealloc 方法:内存管理核心机制
    深入理解 Objective-C 中的 dealloc 方法:内存管理核心机制

    内存管理的基石在Objective-C的世界里,内存管理是开发者必须掌握的核心技能之一。作为一门在手动引用计数(MRC)时代诞生的语言,Objective-C要求程序员对对象的生命周期有清晰的认识。dealloc方法正是这一生命周期中至关重要的终点站。它是一个实例方法,当对象的引用计数降为零时,系统

    理解 native2ascii:Java 国际化开发中的字符编码工具
    理解 native2ascii:Java 国际化开发中的字符编码工具

    native2ascii 工具的基本定位在Ja va应用程序的国际化与本地化开发过程中,处理非拉丁字符集是一个常见且关键的环节。Ja va内部使用Unicode字符集来统一表示全球各种语言的文字,但其属性文件(.properties)在历史上要求使用ASCII编码,或者更准确地说,要求非ASCII字

    如何使用 native2ascii 转换中文字符为 Unicode 转义序列
    如何使用 native2ascii 转换中文字符为 Unicode 转义序列

    理解 native2ascii 工具的基本用途在软件开发,特别是涉及国际化处理的场景中,开发者常常需要处理不同编码的文本资源。native2ascii 是 Ja va 开发工具包(JDK)中提供的一个命令行实用程序,其主要功能是将包含本地字符编码(非ASCII字符)的文件,转换为包含 Unicode

    Java native2ascii 命令详解:解决属性文件乱码问题
    Java native2ascii 命令详解:解决属性文件乱码问题

    native2ascii 命令的由来与作用在Ja va开发中,处理国际化资源文件是一个常见需求。资源文件通常以.properties格式存储,用于支持多语言界面。然而,Ja va属性文件默认采用ISO-8859-1字符集编码,这导致了一个直接的问题:当文件中包含非拉丁字符(如中文、日文、韩文等)时,

    一个 memwatch 实战案例:定位野指针问题
    一个 memwatch 实战案例:定位野指针问题

    内存监控工具的价值与挑战在软件开发,尤其是使用C/C++这类手动管理内存的语言时,内存错误是程序员最常遭遇的难题之一。其中,野指针问题因其隐蔽性和破坏性,往往成为最难定位的“幽灵”缺陷。它可能潜伏在代码中,在特定条件下才被触发,导致程序崩溃、数据损坏或难以预测的行为。传统的调试手段,如打印日志或使用

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    macOS软件
    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    Mac软件 更多
    灵活计算器
    灵活计算器
    macOS/iOS/Android

    灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

    赤友清理大师
    赤友清理大师
    macOS

    赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

    极度公式
    极度公式
    Windows/macOS/Linux

    极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

    WINDOWS 更多
    Windows 10
    Windows 10
    Windows

    Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

    极度公式
    极度公式
    Windows/macOS/Linux

    极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

    密码键盘
    密码键盘
    Windows/macOS/iOS/Android

    密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。