基础-函数

一、MySQL基础

在数据库操作中,函数是SQL的"魔法棒"------它能将复杂操作简化为一行代码,让数据处理变得既高效又优雅。无论是处理字符串、进行数学计算、管理日期时间,还是实现逻辑控制,MySQL的内置函数都能让你事半功倍。

1. 函数

1.1 为什么需要函数?------SQL的"加速器"

函数是MySQL中预定义的、可重复调用的程序代码,它能:

简化复杂逻辑 :用一行代码完成多个步骤

提升查询效率 :减少应用层处理压力

增强代码可读性 :让SQL语句更直观易懂

优化数据处理:在数据库层面完成数据转换

💡 重要提示:在WHERE条件中使用函数可能影响性能(导致索引失效),请谨慎使用。

1.1 字符串函数

字符串函数是处理文本数据的利器,从拼接到格式化,无所不能。这里说明一些常用的字符串函数。

sql 复制代码
-- ------------------- 函数演示 ----------------------
-- concat字符串拼接
SELECT concat('Hello','MySQL');

-- lower全部转换为小写
select lower('Hello');

-- upper全部转换为大写
select upper('hello');

-- lpad向左填充'-'
select lpad('01',5,'-');

-- rpad向右填充'-'
select rpad('01',5,'-');

-- trim去掉字符串头部和尾部的空格
select trim(' hello MySQL ');

-- substring截取执行位置开始的指定位数的字符串
select substring('Hello MySQL',1,5);

1.2 数值函数

数值函数让数据库成为强大的计算工具,无需应用层处理。

sql 复制代码
-- 数值函数
-- ceil向上取整
select ceil(1.5);

-- floor向下取整
select floor(1.5);

-- mod求模
select mod(3,4);

-- rand求随机数,(0-1)之间
select rand();

-- round四舍五入,参数1:操作数,参数二:保留几位小数
select round(2.34,2);
select round(3.34,1);


-- 案例练习2
-- 2. 通过数据库的函数,生成一个六位数的随机验证码
-- 通过rand()*一百王就可以得到一个六位数的整数的数字
-- lpad 参数1:操作数; 参数2:补零至多少位; 参数三: 补什么数据
select lpad(rand(rand()*1000000,0),6,'0') ;
-- 通过向上取整就可以得到一个完整的六位数
-- 但是这里会有一个bug,当随机生成的小数为0.012312,此时*一百万只能得到一个五位数
-- 补零即可

1.3 日期函数

日期函数是数据分析和报表生成的核心,让时间处理变得简单。

sql 复制代码
-- 日期函数
-- curdate()当前日期
select curdate();

-- curtime()当前时间
select curtime();

-- now()当前的时间和日期
select now();

-- YEAR MONTH DAT 分别获取年月日
select YEAR(NOW());
SELECT MONTH(NOW());
SELECT DAY(NOW());

-- date_add 想获取距离x当前日期多少天的函数
-- 月、年只需要修改DAY的参数成MONTH YEAR即可
-- INTERVAL固定格式,70为变量参数
select date_add(now(),INTERVAL 70 DAY);

-- datediff 两个指定时间相隔多少天
-- 是参数1 - 参数2的执行流程
select datediff('2021-12-01','2025-12-27');

-- 案列练习3
-- 查询所有员工的入职天数,并根据入职天数进行倒序
-- curdate():当前的时间、entrydate员工入职的时间
-- as 起别名 order by xxx desc 进行倒序
select name,datediff(curdate(),entrydate) as 'entrtDays' from emp order by entrtDays desc;

1.4 流程函数

流程控制函数让SQL具备条件判断能力,实现更复杂的逻辑。

sql 复制代码
-- 流程控制函数
-- if判断表达式的结果
-- 如果参数一为true 返回OK 否则返回Error
select if(true,'OK','Error');

-- ifnull判断某一个值是否为空
-- 会判断第一参数是否空,不为空返回该参数,为空返回参数二
select ifnull('OK','Default');
-- 注意空字符串会返回空字符串
select ifnull('','Default');
-- NULL则返回设置的默认参数二
select ifnull(NULL,'Default');

-- case when then else end
-- 需求: 查询emp表的员工姓名和工作地址(北京/上海/广州/洛杉矶------>一线城市,其他城市------->二线城市)
select
    name,
    (case workaddress when '北京' then '一线城市' when '上海' then '一线城市' when '广州' then '一线城市' when '洛杉矶' then '一线城市' else '二线城市' end) as '工作地址'
from emp;
sql 复制代码
create table score(
    id int comment 'ID',
    name varchar(20) comment '姓名',
    math int comment '数学',
    english int comment '英语',
    chinese int comment '语文'
)comment '学员成绩表';
insert into score(id,name,math,english,chinese)
values (1,'Tom',67,88,95),
       (2,'Rose',66,77,88),
       (3,'LiHua',89,96,92);

--
select
       id,
       name,
       (case when math >= 85 then '优秀' when math >= 60 then '及格' else '不及格' end) as '数学',
       (case when english >= 85 then '优秀' when english >= 60 then '及格' else '不及格' end) '英语',
       (case when chinese >= 85 then '优秀' when chinese >= 60 then '及格' else '不及格' end) '语文'
from score;

MySQL函数是数据处理的"瑞士军刀",掌握它们能让你的SQL查询:

更简洁 :用一行代码完成复杂操作

更高效 :减少应用层处理,提升性能

更专业:让SQL代码更具可读性和可维护性

相关推荐
清水白石0082 小时前
《深入 Python 上下文管理器:contextlib.contextmanager 与类实现方式的底层差异全景解析》
开发语言·python
程序员佳佳2 小时前
GPT-4时代终结?GPT-5.2与Banana Pro实测数据公开,普通开发者如何接住这泼天富贵
开发语言·python·gpt·chatgpt·重构·api·midjourney
福大大架构师每日一题2 小时前
dify 1.11.2 正式发布:向量数据库、安全增强、测试优化与多语言支持全面升级
数据库·安全
tbRNA2 小时前
Java 基础入门易错知识点(三)
java·开发语言
yuxb732 小时前
Kubernetes核心组件详解与实践:Service
笔记·kubernetes
今天有个Bug2 小时前
【计算机毕业设计】流浪动物救助平台 - SpringBoot+Vue
sql·mysql·spring·vue·毕业设计·课程设计
码农学院2 小时前
Mysql 中的性能调优方法
数据库·mysql
问道飞鱼2 小时前
【Rust编程语言】Rust数据类型全面解析
开发语言·后端·rust·数据类型
UrSpecial2 小时前
MySQL索引
数据库·mysql