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

MySQL 从入门到精通 2:函数

MySQL 从入门到精通 2:函数

字符串函数

函数功能
CONCAT(S1,S2…Sn)字符串拼接,将S1,S2,…Sn拼接成一个字符串
LOWER(str)将字符串str全部转为小写
UPPER(str)将字符串str全部转为大写
LPAD(str,n,pad)左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
RPAD(str,n,pad)右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
TRIM(str)去掉字符串头部和尾部的空格
SUBSTRING(str,start,len)返回字符串str从start位置起的len个长度的字符串

连接字符串

select concat('Hello',' ','World');

转为小写

select lower('Hello World');

转为大写

select upper('Hello World');

左填充

select lpad('1',5,'0');

右填充

select rpad('1',5,'0');

去除空白符

select trim(' Hello World   ');

截取子字符串

select substring('Hello World', 1, 5);

需要注意的是,SQL 函数中字符串偏移量是从1开始的,而非编程语言中常见的从0开始

数值函数

函数功能
CEIL(x)向上取整
FLOOR(x)向下取整
MOD(x)返回 x/y 的余数
RAND()返回 0~1 之间的随机数
ROUND(x,y)对x保留y位小数(四舍五入)

向上取整

select ceil(1.1);
-- 结果为 2

向下取整

select floor(1.1);
-- 结果为 1

取余

select mod(9,4);
-- 结果为 1

随机数

select rand();
-- 结果为 0.6149889273708583

保留小数位

select round(1.234345, 2);
-- 结果为 1.23

案例,利用 MySQL 函数获取一个六位的随机数:

select lpad(round(rand()*1000000,0),6,'0');

日期函数

函数功能
CURDATE()当前日期
CURTIME()当前时间
NOW()当前日期和时间
YEAR(date)获取指定日期的年份
MONTH(date)获取指定日期的月份
DAY(date)获取指定日期的日期
DATE_ADD(date, INTERVAL expr type)返回一个日期/时间值加上一个时间间隔 expr 后的时间值
DATEDIFF(date1, date2)返回起始时间 date1 和结束时间 date2 之间的天数

当前日期

select curdate();
-- 返回 2025-07-31

当前时间

select curtime();
-- 返回 12:23:19

当前日期和时间

select now();
-- 返回 2025-07-31 12:24:03

指定日期的年份

select year(now());
-- 返回 2025

指定日期的月份

select month(now());
-- 返回 7

指定日期的日期

select day(now());
-- 返回 31

日期累加

select date_add('2025-01-01', interval 5 day );
-- 结果 2025-01-06
select date_add('2025-01-01', interval 5 month );
-- 结果 2025-06-01
select date_add('2025-01-01', interval 5 year );
-- 结果 2030-01-01

计算日期差值

select datediff('2025-05-01', '2025-03-07');
-- 结果 55

需要注意的是,这个函数计算时候是用前者减去后者,所以是可能出现负值的:

select datediff('2025-03-07', '2025-05-01');
-- 结果 -55

流程函数

函数功能
IF(value,t,f)如果value 为true,返回t,否则返回f
IFNULL(value1,value2)如果value1不为空,返回value1,否则返回value2
CASE WHEN [val1] THEN [res1] … ELSE [default] END如果val1 为true,返回 res1,…否则返回default
CASE [expr] WHERN [val1] THEN [res1] … ELSE [default] END如果 expr 的值等于 val1,返回 res1, … 否则返回 default

IF:

select if(true, 'true', 'false');
-- 返回 true
select if(false, 'true', 'false');
-- 返回 false

IFNULL:

select ifnull(null, 'is null');
-- 返回 is null
select ifnull('ok', 'is null');
-- 返回 ok

CASE:

示例表数据:

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' , 23, 66, 90),(3, 'Jack', 56, 98, 76);

根据成绩显示优秀、及格或不及格:

selectid,id, name, math,(case when math>=85 then '优秀' when math>=60 then '及格' else '不及格' end) as math_level,english,(case when english>=85 then '优秀' when english>=60 then '及格' else '不及格' end) as englisth_level,chinese,(case when chinese>=85 then '优秀' when chinese>=60 then '及格' else '不及格' end) as chinese_level
from score;

参考资料

  • 黑马程序员 MySQL数据库入门到精通
http://www.dtcms.com/a/322708.html

相关文章:

  • Linux的软件防火墙iptables
  • 香港服务器容器网络插件的多节点通信性能基准测试
  • LeetCode 刷题【36. 有效的数独】
  • 6- Python 网络爬虫—验证码突破全解析: 从 OCR 到深度学习的对抗实战指南
  • CSS 选择器进阶:用更聪明的方式定位元素
  • DBSCAN聚类算法实战全解析
  • 多Agent技术发展与进化
  • vue+flask山西非遗文化遗产图谱可视化系统
  • IntelliJ IDEA 新手全方位使用指南
  • 深入 FastMCP 源码:认识 tool()、resource() 和 prompt() 装饰器
  • Kubelet 探针如何选择 IP:status.PodIP 溯源与“同 Pod 两个 IP“现象解析
  • 回答“http协议 ,js组件化,工程化, seo优化策略 ,针对不同平台终端适配 web标注和兼容性”
  • nrm工具管理镜像源
  • 通过 Certimate 统一管理 SSL 证书 支持自动化申请、全平台部署
  • 第八章 SQL编程系列-Oracle慢SQL优化实战:从执行计划到索引设计的深度解析
  • 编程速递:2025 年巴西 Embarcadero 会议,期待您的到来
  • 金融通用智能体(Financial General Agent, FGA)的端到端解决方案
  • 视图是什么?有什么用?什么时候用?MySQL中的视图
  • Swift 实战:秒算两个数组的交集(LeetCode 349)
  • 一周学会Matplotlib3 Python 数据可视化-标注 (Annotations)
  • 力扣-74.搜索二维矩阵
  • [Oracle] MAX()和MIN()函数
  • 深入理解 Gin 框架的路由机制:从基础使用到核心原理
  • Linux系统之lua 详解
  • 版本控制的详细说明介绍(已有github账号版)
  • 记一次奇异的bug
  • 蓝牙技术概览
  • [Oracle] SUBSTR()函数
  • 轻量化阅读应用实践:21MB无广告电子书阅读器测评
  • Spring Boot 应用测试全指南:从单元测试到集成测试的实战之路