MySQL 视频课 · 50 集 / 内置函数:字符串、数值、日期、流程 / P27
第 27 集 / 共 50 · 内置函数:字符串、数值、日期、流程 · 视频 p=27 · 时长 15:09
P27 27. 基础-函数-字符串函数
看视频,对照阅读:在新标签打开原视频(p=27) · 先看跟播对照
字符串函数是函数章的起点。这一集最该带走的一条:把函数写在列上,直接改表里的数据。
复习模式:快速跳知识点(详解在下方各节)
复习顺序:先看“一句话理解”能否复述,再扫步骤,最后做自测;答不出时回到小例与易错。
一句话理解
字符串函数把文本当材料加工;最常用的是补位——工号不足 5 位就在左边补 0。
跟播:视频里 ↔ 本站
视频先过七个字符串函数,最后给「工号统一 5 位、不足补 0」的练习页。
| 视频里 / 原课字段 | 本站对应 |
|---|---|
| emp.workno(讲义的员工工号列) | employee.workno(本站练习表新增的一列) |
| update emp set workno = lpad(workno, 5, '0') | update employee set workno = lpad(workno, 5, '0')(同一写法) |
看完应能:能先 SELECT 预览、再 UPDATE,并说清 LPAD 三个参数各是什么
看视频时以讲义表为准,跟练时用本站表;结构相同、数字不同。
按这 4 步做
- 补位:LPAD(原串, 目标总长度, 填充串) 在左边补到指定长度,RPAD 在右边补。三个参数各管一件事:处理谁、最终几位、用什么补。
- 先预览再改:
SELECT workno, LPAD(workno, 5, '0')看结果对不对,再写UPDATE … SET workno = LPAD(workno, 5, '0'),最后回读确认。 - 拼接与大小写:CONCAT(a,b) 连接字符串,LOWER/UPPER 统一大小写;清理用 TRIM 去首尾空格,截取用 SUBSTRING(串, 起始位置, 长度),位置从 1 起。
- 数字符还是数字节:CHAR_LENGTH 数「字」,LENGTH 数「字节」,中文在 utf8mb4 下占 3 字节。
小例
-- 表:employee(id, name, workno),工号现在是 '7'、'12'、'345'
-- 建表与插入见本页练习脚本 p27.sql(独立练习库 mysqlnotes_p27)
-- 第 1 步:先预览,不改数据。LPAD(原串, 目标总长度, 填充串)
SELECT id, workno, LPAD(workno, 5, '0') AS 补齐后
FROM employee
ORDER BY id;
-- 第 2 步:确认预览对了,再把函数写进 UPDATE 的列位置
UPDATE employee
SET workno = LPAD(workno, 5, '0');
-- 第 3 步:回读,确认列真的改了
SELECT id, workno FROM employee ORDER BY id;
第 1 步结果三行:00007、00012、00345。三个参数分别是:要处理的字符串(这里是列 workno)、目标总长度 5、左边填充的字符 '0'。它保证「最终长度是 5」,所以比 5 位长的工号会被截断(LPAD('1234567',5,'0') 得 '12345'),不是只补不截。第 2 步影响 3 行——函数套在列上会对每一行各算一次;改之前先 SELECT 预览,是因为 UPDATE 写错要再改回来。第 3 步回读应看到 00007、00012、00345。
下面每条只演示一个点,可以单独复制执行。
SELECT LPAD('7', 5, '0') AS 补零, LPAD('1234567', 5, '0') AS 太长被截断;
一行:00007、12345。目标长度是硬指标——短了补、长了截,所以别把它当「只追加」。
00007、12345
其他函数速查(不用背,用时查)
| 函数 | 做什么 | 一句话例子 |
|---|---|---|
CONCAT(s1, s2, …) | 拼接成一个字符串 | CONCAT('emp-', '007') → emp-007 |
LOWER / UPPER | 转小写 / 大写 | UPPER('mysql') → MYSQL |
RPAD(s, n, pad) | 右侧填充到 n 个字符 | RPAD('7', 3, '-') → 7-- |
TRIM(s) | 去掉首尾空格 | TRIM(' mysql ') → mysql |
SUBSTRING(s, start, len) | 从第 start 位取 len 个字符(从 1 起) | SUBSTRING('mysql', 2, 3) → ysq |
CHAR_LENGTH / LENGTH | 字符数 / 字节数 | CHAR_LENGTH('数据库')=3,LENGTH('数据库')=9 |
易错点
- 用 LENGTH 判断字符数:中文一个字多个字节,LENGTH('数据库')=9 而字符数是 3,长度校验会误判。
- 以为 LPAD 只会补:目标长度比原串短时它会截断,LPAD('abcdef',3,'0') 得 'abc'。
- SUBSTRING 起始位置写 0 以为从第一个字符开始:MySQL 位置从 1 计,写 0 得到空串。
- 不预览直接 UPDATE:改错要再写一条 UPDATE 改回来,先 SELECT 一遍成本更低。
30 秒速记
自测(2 题,先答再展开)
自测 1:为什么校验“姓名不超过 10 个字”要用 CHAR_LENGTH 而不是 LENGTH?
LENGTH 返回字节数,utf8mb4 下一个汉字 3 字节,10 个汉字会被算成 30,校验立刻误判;CHAR_LENGTH 才是字符个数。
自测 2:LPAD('7',3,'0') 和 LPAD('1234',3,'0') 分别得到什么?为什么?
'007' 和 '123'。LPAD 的目标是“最终长度为 3”,不足就补、超出就截断,它不保证只在左侧追加。
材料与来源
展开材料出处、讲义页码与证据等级
| 材料 | 类型 / 位置 | 支持了什么 |
|---|---|---|
| P27 原视频页(BV1Kr4y1i7ru) | 平台视频页 · P27;采样静帧 t012/t20/t30/t80/tend | t30 为“字符串函数”页,t80 为工号补 0 的练习页。 |
| MySQL 8.0 Reference:字符串函数 | 官方文档 | 核对 LPAD/SUBSTRING/CHAR_LENGTH 与 LENGTH 的差异,未逐字引用。 |
按 t30 帧核对:画面为「字符串函数」章节页;t80 帧是练习页,题干要求把员工工号统一成 5 位、不足补 0(示例 1 号写成 00001),与讲义 p56 案例的 update emp set workno = lpad(workno, 5, '0') 对应。函数清单另由 P31 小结页与讲义 p55 表格(CONCAT、LOWER、UPPER、LPAD、RPAD、TRIM、SUBSTRING)核对。原声字幕未取得,讲师逐条演示与结果未核实;正文示例与数字为原创,并在 MySQL 8.0.46 实跑核对。
讲义对照:讲义 3.1 字符串函数 · p54–56(公开镜像;按主题对应,切点 notexact)
- 画面静帧 9 帧,采样点 0:12–14:56 / 全片 15:09(只用于确认画面主题,不作内容边界)
- 原声字幕未取得:匿名接口字幕轨为空且需登录,未使用任何账号
等级含义:平台视频页 / 官方文档 / 课件 = 原始材料;二手整理 = 参考;推断 = 未经核实。站内补充的解释与练习会在此说明。