楼主: 吃掉彩虹糖
149 0

[基础问题] 常用的mysql字符串函数及使用场景 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

80%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
30 点
帖子
2
精华
0
在线时间
0 小时
注册时间
2018-9-5
最后登录
2018-9-5

楼主
吃掉彩虹糖 发表于 2025-11-21 17:09:11 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

处理文本数据的利器:MySQL 字符串函数

字符串函数在 MySQL 中主要用于字符串的拼接、截取、替换、查找和大小写转换等操作。以下是开发中最常用的几类字符串函数及其详细说明。

3. 字符串截取:SUBSTRING () / SUBSTR ()

核心作用:从字符串中提取指定部分。这两个函数在语法上完全一致,SUBSTRSUBSTRING 的简写。

函数语法:

SUBSTRING(str, start, length)
  • str
    : 目标字符串;
  • start
    : 起始位置(正数从左开始,负数从右开始);
  • length
    : 可选参数,截取长度(省略则截取到字符串末尾)。

实战示例:

-- 1. 从左侧截取(start 为正数)
SELECT SUBSTRING('13800138000', 1, 3) AS phone_prefix; -- 结果:138(截取前3位)

-- 2. 从右侧截取(start 为负数)
SELECT SUBSTRING('13800138000', -4) AS phone_suffix; -- 结果:8000(截取最后4位,省略length)

-- 场景:隐藏手机号中间4位
SELECT CONCAT(SUBSTR(phone,1,3), '****', SUBSTR(phone,-4)) AS hide_phone FROM user;

5. 大小写转换:UPPER () / LOWER ()

核心作用:将字符串转换为大写或小写。这在统一查询条件时非常有用,可以避免因大小写不同而产生的问题。

函数语法:

UPPER(str)
UCASE(str)
: 转换为大写;
LOWER(str)
LCASE(str)
: 转换为小写。

实战示例:

SELECT UPPER('mysql') AS upper_str; -- 结果:MYSQL
SELECT LOWER('MYSQL FUNCTION') AS lower_str; -- 结果:mysql function

-- 场景:不区分大小写查询用户名
SELECT * FROM user WHERE LOWER(username) = LOWER('ZhangSan');

1. 字符串拼接:CONCAT () / CONCAT_WS ()

核心作用:将多个字符串合并成一个字符串,适用于字段合并场景(如姓名 + 手机号、地址拼接)。

函数语法:

CONCAT(str1, str2, ...)
: 直接拼接多个字符串, 任意一个参数为 NULL 时,结果为 NULL 。
CONCAT_WS(separator, str1, str2, ...)
: 指定分隔符(separator)拼接, 自动忽略 NULL 值 (推荐日常使用)。

实战示例:

-- 1. CONCAT 拼接(注意 NULL 影响)
SELECT CONCAT('张三', '-', '13800138000') AS full_info; -- 结果:张三-13800138000
SELECT CONCAT('李四', '-', NULL) AS full_info; -- 结果:NULL(有 NULL 则整体为 NULL)

-- 2. CONCAT_WS 拼接(忽略 NULL,推荐)
SELECT CONCAT_WS('-', '北京市', '朝阳区', '建国路', NULL) AS full_address; -- 结果:北京市-朝阳区-建国路

4. 字符串替换:REPLACE ()

核心作用:将字符串中的指定子串替换成另一个子串。常用于数据清洗,例如去除特殊字符或统一格式。

函数语法:

REPLACE(str, old_str, new_str)
: 将 str 中的 old_str 替换为 new_str。

实战示例:

-- 1. 替换特殊字符
SELECT REPLACE('MySQL@2025#', '@#', '') AS clean_str; -- 结果:MySQL2025(去除@和#)

-- 2. 统一日期格式(将 / 替换为 -)
SELECT REPLACE('2025/11/20', '/', '-') AS standard_date; -- 结果:2025-11-20

-- 场景:清洗用户输入的空格
UPDATE user SET username = REPLACE(username, ' ', '') WHERE username LIKE '% %';

6. 去除空格:TRIM () / LTRIM () / RTRIM ()

核心作用:去除字符串前后的多余空格。这在处理用户输入时非常常见。

函数语法:

TRIM(str)
: 去除字符串前后两端的空格;
LTRIM(str)
: 仅去除左侧空格;
RTRIM(str)
: 仅去除右侧空格。

实战示例:

SELECT TRIM('  MySQL 函数  ') AS trim_str; -- 结果:MySQL 函数(前后空格去除)
SELECT LTRIM('  左侧空格  ') AS ltrim_str; -- 结果:左侧空格  (仅左侧去除)
SELECT RTRIM('  右侧空格  ') AS rtrim_str; -- 结果:  右侧空格(仅右侧去除)

-- 场景:清洗用户注册时的用户名空格
INSERT INTO user (username) VALUES (TRIM('  LiSi  ')); -- 存储为:LiSi

2. 字符串长度:LENGTH () / CHAR_LENGTH ()

核心作用:获取字符串的字节长度或字符长度。在处理中文时,区分这两种长度非常重要。

函数语法:

LENGTH(str)
: 返回字符串的字节长度(UTF-8 编码下,1 个中文 = 3 个字节,1 个英文 = 1 个字节)。
CHAR_LENGTH(str)
: 返回字符串的字符长度(无论中英文,1 个字符 = 1 长度)。

实战示例:

-- 处理中文时的差异(UTF-8 编码)
SELECT 
  LENGTH('MySQL 字符串函数') AS byte_len,  -- 结果:17(6个英文+1个空格+5个中文=6+1+5*3=17)
  CHAR_LENGTH('MySQL 字符串函数') AS char_len; -- 结果:12(6+1+5=12)

-- 场景:校验用户名长度(要求 2-10 个字符)
SELECT username FROM user WHERE CHAR_LENGTH(username) BETWEEN 2 AND 10;

7. 字符串查找:LOCATE () / INSTR ()

核心作用:在目标字符串中查找子串的位置。如果找不到则返回 0。

函数语法:

LOCATE(substr, str, start)
: 从 start 位置开始查找 substr 在 str 中的位置(start 可选,默认从 1 开始);
INSTR(str, substr)
: 功能与 LOCATE 相同,但参数顺序相反(str 在前,substr 在后)。

实战示例:

SELECT LOCATE('函数', 'MySQL 字符串函数') AS pos; -- 结果:8(子串从第8个字符开始)
SELECT INSTR('MySQL 字符串函数', '字符串') AS pos; -- 结果:7
SELECT LOCATE('abc', 'MySQL') AS pos; -- 结果:0(未找到)

-- 场景:筛选包含特定关键词的内容
SELECT * FROM article WHERE LOCATE('MySQL', tit
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MySQL sql 字符串 substring function

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-5 22:56