第14章:字符串函数
英语单词
1. uppercase ⼤写字⺟
2. lowercase ⼩写字⺟
3. left 左
4. substring: ⼦字符串
1. sub:次要的、副、⼦的
2. 副标题:subtitle
5. string 字符串
6. trim:修剪
7. reverse:相反的、翻转
8. field:字段、⽥地
9. locate:定位
1. location:地点、位置
2. local adj 本地的 当地的
10. position 位置
一、length()
1.查询字节⻓度
length()
⽤途:查询字符的字节⻓度。
语法
LENGTH(string)
参数
string:必需。字符串
返回值:整数或NUll
整数:表示字符串的⻓度
0:查询失败
示例
SELECT LENGTH("SQL Tutorial") AS LengthOfString;
字符集
gbk:使⽤2个字节存储⼀个汉字
unicode:使⽤3个字节存储⼀个汉字
二、upper()
2.⼤⼩写转换
upper()
⽤途:将英⽂字符串转为全⼤写
语法
UPPER(英⽂⽂本)
参数
英⽂⽂本:必需
示例
SELECT UPPER('Hello'); -- 输出 'HELLO'
SELECT UCASE('mysql'); -- 输出 'MYSQL'
三、LOWER()
⽤途:将英⽂字符串转为全⼩写。
语法
lower(英⽂⽂本)
参数
英⽂⽂本:必须
示例
SELECT LOWER('Hello WORLD'); -- 输出:hello world
SELECT LOWER('ÄÖÜ');
使⽤场景-- 输出:äöü(⽀持多语⾔字符)
四、trim()
⽤途:删除字符串尾随空格。
语法
参数
string:必须,要删除空格的字符串
示例
五、reverse()
4.反转字符
reverse()-- 插⼊数据时统⼀存储⼩写
INSERT INTO users (username) VALUES (LOWER('Admin123'));-- 查找忽略⼤⼩写的⽤户名
SELECT * FROM users WHERE LOWER(username) = LOWER('admin');-- 将标题转为⼩写格式
SELECT LOWER(title) AS lowercase_title FROM articles;-- 批量更新邮箱为⼩写
UPDATE employees
SET email = LOWER(email)
WHERE email REGEXP '[A-Z]'; -- 仅处理含⼤写字⺟的记录
RTRIM(string)
SELECT RTRIM("SQL Tutorial ") AS RightTrimmedString;
⽤途:反转字符串字符顺序。
语法
REVERSE(string)
参数
string:必须,要反转顺序的字符串
示例
SELECT REVERSE("SQL Tutorial");
5.⾃定义排序
field()
⽤途:返回值列表中值的索引位置。
注意:如果在值列表中找不到指定的值,则此函数将返回0。如果值为null,则此函数将返回
0。
语法
FIELD(value, val1, val2, val3, ...)
参数
value:必须,要查的值
val1:值列表
示例
SELECT FIELD("q", "s", "q", "l");-- 输出 2
6.提取字符串
left()
⽤途:从左起截取-指定⻓度字符
语法
LEFT(str, length)
参数
str:必需,指定提取的字符串
length:必需。要提取的字符数。如果此参数⼤于字符串中的字符数,则此功能将返回全
部字符串
示例:
SELECT LEFT('ABCDE', 3); -- 输出 'ABC'
right()
substring()
⽤途:从指定位置截取字符串
语法
SUBSTRING(str, start, [length])
参数
str:必需,要截取的字符串。
start :必需的。开始位置。可以是正数或负数。如果是正数,则此函数从字符串的开头
提取。如果是负数,则此函数从字符串的末端提取
[length]:可选。要提取的字符数。如果省略,将返回整个字符串(从开始位置)
示例
SELECT SUBSTRING('Hello World', 7); -- 输出 'World'
SELECT SUBSTRING('Hello World', 7, 3); -- 输出 'Wor'
locate()
7.查询字符位置
locate()
⽤途:返回⼦字符串⾸次出现的位置(可指定起始点)。如果在原始字符串中找不到⼦字符
串,则此功能返回0。⼤⼩写不敏感。
注意:如果在值列表中找不到指定的值,则此函数将返回0。如果值为null,则此函数将返回
0。
语法
LOCATE(⼦字符串, 主字符串, [start])
参数
substring:必需的。⼦字符串
string:必需的。主字符串
示例
SELECT LOCATE("3", "W3Schools.com") AS MatchPosition;
SELECT LOCATE("com", "W3Schools.com", 3) AS MatchPosition;
SELECT LOCATE('lo', 'Hello'); -- 输出 4(从第1位开始找)
SELECT LOCATE('o', 'Hello', 5); -- 输出 5
场景结果说明
start 是正整数且有效位置值返回从 start 位置后的⾸次匹配位置
start 是0或负数0⽆效参数,直接返回0
start 超出字符串⻓度0搜索范围超出实际内容
⼦字符串为空字符串 ('') 1空字符串在任何位置都被认为存在
1. 默认从第1个字符开始搜索
2. 指定从第6个字符开始搜索
3. ⼦字符串不存在时返回0
4. 指定起始位置超过字符串⻓度
关键特性
position()
SELECT LOCATE('o', 'Hello World! Welcome to MySQL.');-- 结果:5(第⼀个 'o' 的位置)
SELECT LOCATE('o', 'Hello World! Welcome to MySQL.', 6);-- 结果:8(从第6个字符开始后的第⼀个 'o' 的位置)
SELECT LOCATE('Python', 'Hello World! Welcome to MySQL.', 1);-- 结果:0(未找到)
SELECT LOCATE('o', 'Hello World! Welcome to MySQL.', 30);-- 结果:0(字符串总⻓度⼩于30)
⽤途:返回字符串中第⼀次出现的位置。如果在原始字符串中找不到⼦字符串,则此功能返回
0。
语法
POSITION(⼦字符串 IN 主字符串)
参数
substring()
必需的。在字符串中搜索的⼦字符串
string:必需的。将要搜索的原始字符串
示例
SELECT POSITION("3" IN "W3Schools.com") AS MatchPosition;
SELECT POSITION('@' IN 'user@example.com'); -- 输出 5
instr()
⽤途:instr()函数返回另⼀个字符串中⾸次出现字符串的位置。不区分⼤⼩写
语法
INSTR(主字符串, ⼦字符串)
参数
stinrg1:必需的。主字符串
sting2:必需的。⼦字符串。如果找不到字符串2,此功能返回0
示例
SELECT INSTR('Hello', 'el'); -- 输出 2
8.关键区别与适⽤场景
函数特点典型应⽤场景
UPPER/UCASE统⼀数据格式⽤户输⼊标准化、不区分⼤⼩写查
询
LEFT/SUBSTRING精准提取部分数据截取编码、⽇期、关键词
REVERSE反转字符顺序⽣成镜像⽂本、特殊加密逻辑
FIELD⾃定义排序优先级业务规则排序(如状态顺序)
LOCATE/INSTR⼦串位置查找(参数顺序不
同)
解析邮箱、URL、关键词定位
9.常⻅应⽤
1. 组合使⽤:
2. 处理空值:
3. 动态排序: