MySQL 视频课 · 50 集 / 内置函数:字符串、数值、日期、流程 / P27

第 27 集 / 共 50 · 内置函数:字符串、数值、日期、流程 · 视频 p=27 · 时长 15:09

P27 27. 基础-函数-字符串函数

讲义 3.1 字符串函数 p54–56

按主题对应,非逐句切分

来源与核对说明

以同版讲义的公开镜像核对章节与页码(镜像非官方出品);非逐字稿,示例为原创补充。

本页是学习笔记,不等同于视频逐字稿。原声字幕未取得(匿名接口字幕轨为空且需登录,未使用任何账号),也没有逐句讲解记录;讲义只按节与页码对应,切点未逐句确证。

讲义索引:p54–56 · 3.1 字符串函数 · 切点 notexact

讲义是第三方公开镜像(95 页 PDF),不是官方原件;这里只用它核对章节顺序与页码,不转载正文。

完整来源说明与变更记录 →

看视频,对照阅读:在新标签打开原视频(p=27) · 先看跟播对照

字符串函数是函数章的起点。这一集最该带走的一条:把函数写在列上,直接改表里的数据。

复习模式:快速跳知识点(详解在下方各节)

复习顺序:先看“一句话理解”能否复述,再扫步骤,最后做自测;答不出时回到小例与易错。

一句话理解

字符串函数把文本当材料加工;最常用的是补位——工号不足 5 位就在左边补 0。

跟播:视频里 ↔ 本站

视频里 / 原课字段本站对应
emp.workno(讲义的员工工号列)employee.workno(本站练习表新增的一列)
update emp set workno = lpad(workno, 5, '0')update employee set workno = lpad(workno, 5, '0')(同一写法)

看视频时以讲义表为准,跟练时用本站表;结构相同、数字不同。

按这 4 步做

  1. 补位:LPAD(原串, 目标总长度, 填充串) 在左边补到指定长度,RPAD 在右边补。三个参数各管一件事:处理谁、最终几位、用什么补。
  2. 先预览再改:SELECT workno, LPAD(workno, 5, '0') 看结果对不对,再写 UPDATE … SET workno = LPAD(workno, 5, '0'),最后回读确认。
  3. 拼接与大小写:CONCAT(a,b) 连接字符串,LOWER/UPPER 统一大小写;清理用 TRIM 去首尾空格,截取用 SUBSTRING(串, 起始位置, 长度),位置从 1 起。
  4. 数字符还是数字节:CHAR_LENGTH 数「字」,LENGTH 数「字节」,中文在 utf8mb4 下占 3 字节。

小例

先准备本集练习数据:p27.sql · 练习库说明

SQL 示例
-- 表: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。

下面每条只演示一个点,可以单独复制执行。

顺手验证:LPAD 超长会截断
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

易错点

30 秒速记

LPAD(原串, 总长度, 填充串) 三个参数;先预览再 UPDATE 再回读;位置从 1 起;CHAR_LENGTH 字符、LENGTH 字节。

自测(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/tendt30 为“字符串函数”页,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(只用于确认画面主题,不作内容边界)
  • 原声字幕未取得:匿名接口字幕轨为空且需登录,未使用任何账号

等级含义:平台视频页 / 官方文档 / 课件 = 原始材料;二手整理 = 参考;推断 = 未经核实。站内补充的解释与练习会在此说明。

下载本集 Markdown