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

MySQL字符串函数全解析

MySQL 中 字符串函数 的详细讲解,涵盖常用函数分类、语法、示例及注意事项:


一、字符串基础操作函数

1. CONCAT(str1, str2, ...)

功能:连接多个字符串
示例

SELECT CONCAT('Hello', ' ', 'World');  -- 输出:'Hello World'
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM users;
2. CONCAT_WS(separator, str1, str2, ...)

功能:用指定分隔符连接字符串
示例

SELECT CONCAT_WS(', ', 'Apple', 'Banana', 'Orange');  -- 输出:'Apple, Banana, Orange'
3. LENGTH(str) / CHAR_LENGTH(str)

区别

  • LENGTH():返回字节数(受字符集影响)
  • CHAR_LENGTH():返回字符数
    示例
SELECT LENGTH('中国');    -- UTF8 中文字符占3字节 → 6
SELECT CHAR_LENGTH('中国'); -- 字符数 → 2

二、字符串截取与拆分

1. SUBSTRING(str, start, length)

功能:从位置 start 截取 length 个字符(下标从 1 开始)
别名SUBSTR(), MID()
示例

SELECT SUBSTRING('MySQL Tutorial', 7, 5); -- 输出:'Tutor'
2. LEFT(str, len) / RIGHT(str, len)

功能:截取左/右侧指定长度的字符
示例

SELECT LEFT('Database', 4);  -- 输出:'Data'
SELECT RIGHT('Database', 4); -- 输出:'base'
3. SUBSTRING_INDEX(str, delimiter, count)

功能:按分隔符截取部分字符串

  • count > 0:从左开始取
  • count < 0:从右开始取
    示例
SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);  -- 输出:'www.mysql'
SELECT SUBSTRING_INDEX('www.mysql.com', '.', -1); -- 输出:'com'

三、字符串搜索与定位

1. LOCATE(substr, str, [start])

功能:返回子串首次出现的位置(找不到返回0)
别名POSITION(substr IN str)
示例

SELECT LOCATE('SQL', 'MySQL SQL');  -- 输出:3 (从第1个字符开始找)
SELECT LOCATE('SQL', 'MySQL SQL', 5); -- 从第5位开始找 → 7
2. INSTR(str, substr)

功能:同 LOCATE,但参数顺序相反
示例

SELECT INSTR('MySQL', 'SQL'); -- 输出:3

四、字符串替换与修改

1. REPLACE(str, from_str, to_str)

功能:替换所有匹配的子串
示例

SELECT REPLACE('I like cats', 'cats', 'dogs'); -- 输出:'I like dogs'
2. INSERT(str, pos, len, newstr)

功能:从位置 pos 开始替换 len 个字符为 newstr
示例

SELECT INSERT('Hello World', 7, 5, 'MySQL'); -- 输出:'Hello MySQL'
3. TRIM([{BOTH|LEADING|TRAILING} [remstr] FROM] str)

功能:去除首尾指定字符(默认去空格)
示例

SELECT TRIM('  MySQL  ');             -- 输出:'MySQL'
SELECT TRIM(LEADING 'x' FROM 'xxxSQLxxx'); -- 输出:'SQLxxx'

五、大小写转换

1. UPPER(str) / UCASE(str)

功能:转大写
示例

SELECT UPPER('Hello'); -- 输出:'HELLO'
2. LOWER(str) / LCASE(str)

功能:转小写
示例

SELECT LOWER('SQL'); -- 输出:'sql'

六、字符串填充

1. LPAD(str, len, padstr)

功能:左侧填充至长度 len
示例

SELECT LPAD('7', 3, '0'); -- 输出:'007'
2. RPAD(str, len, padstr)

功能:右侧填充至长度 len
示例

SELECT RPAD('Hi', 5, '!'); -- 输出:'Hi!!!'

七、字符串比较与格式化

1. STRCMP(expr1, expr2)

功能:比较字符串

  • 返回 0:相等
  • 返回 1expr1 > expr2
  • 返回 -1expr1 < expr2
    示例
SELECT STRCMP('apple', 'banana'); -- 输出:-1
2. FORMAT(X, D)

功能:数字格式化(千位分隔,四舍五入)
示例

SELECT FORMAT(1234567.4567, 2); -- 输出:'1,234,567.46'

八、其他实用函数

1. REPEAT(str, count)

功能:重复字符串

SELECT REPEAT('Ha', 3); -- 输出:'HaHaHa'
2. REVERSE(str)

功能:反转字符串

SELECT REVERSE('SQL'); -- 输出:'LQS'
3. SPACE(N)

功能:生成 N 个空格

SELECT CONCAT('Hello', SPACE(3), 'World'); -- 输出:'Hello   World'

九、实战应用场景

场景1:格式化电话号码
SELECT phone,CONCAT(SUBSTRING(phone, 1, 3),'-',SUBSTRING(phone, 4, 4),'-',SUBSTRING(phone, 8, 4)) AS formatted_phone
FROM contacts;
场景2:提取邮箱域名
SELECT email,SUBSTRING_INDEX(email, '@', -1) AS domain 
FROM users;
场景3:安全显示敏感信息
SELECT CONCAT(LEFT(card_number, 4),REPEAT('*', LENGTH(card_number) - 8),RIGHT(card_number, 4)) AS masked_card
FROM payments;

十、注意事项

  1. 字符集影响
    • 函数如 LENGTH()utf8mb4 中可能返回意外字节数(如表情符号占4字节)
  2. NULL 处理
    • 输入参数为 NULL 时,大多数函数返回 NULL
    SELECT CONCAT('Hello', NULL); -- 输出:NULL
    
  3. 性能优化
    • 避免在 WHERE 条件中对列使用函数(如 WHERE UPPER(name) = 'JOHN'),会导致索引失效
  4. 多字节字符
    • 使用 CHAR_LENGTH() 替代 LENGTH() 处理多语言文本

总结对比表

函数类别常用函数核心用途
连接CONCAT, CONCAT_WS字符串拼接
长度计算LENGTH, CHAR_LENGTH字节/字符数统计
截取SUBSTRING, LEFT, RIGHT提取子串
定位LOCATE, INSTR查找子串位置
替换REPLACE, INSERT修改字符串内容
空白处理TRIM, LTRIM, RTRIM去除首尾字符
大小写UPPER, LOWER转换大小写
填充LPAD, RPAD按长度填充字符串
实用工具REPEAT, REVERSE, SPACE生成特定格式字符串
http://www.dtcms.com/a/269426.html

相关文章:

  • 设计模式笔记_创建型_建造者模式
  • Android 15应用适配指南
  • .NET9 实现对象深拷贝和浅拷贝的性能测试
  • 【Node.js】文本与 pdf 的相互转换
  • 大数据平台之ranger与ldap集成,同步用户和组
  • 手机、平板音频软件开发调测常用命令
  • 【字节跳动】数据挖掘面试题0013:怎么做男女二分类问题, 从抖音 app 提供的内容中。
  • Ubuntu 22.04 安装英伟达驱动
  • 【PTA数据结构 | C语言版】返回单链表 list 中第 i 个元素值
  • [论文阅读] 软件工程 | 自适应CPS中的人机协作与伦理
  • Spring Batch终极指南:原理、实战与性能优化
  • 掌握Linux信号集操作技巧
  • 人工智能-基础篇-25-认识一下LLM开发应用框架--LangChain
  • RAGflow图像解析与向量化分析
  • Vue 2现代模式打包:双包架构下的性能突围战
  • 【芯片测试篇】:93K测试机I2C的设置和调试
  • 计算机网络:(八)网络层(中)IP层转发分组的过程与网际控制报文协议 ICMP
  • 【排序】插入排序
  • 深入了解linux系统—— System V之消息队列和信号量
  • Flask 解决 JSON 返回中文乱码问题方案
  • Bright Data MCP+Trae :快速构建电商导购助手垂直智能体
  • MySQL Galera Cluster部署
  • 算法化资本——智能投顾技术重构金融生态的深度解析
  • 【UE5】虚幻引擎的运行逻辑
  • 【操作系统】进程(二)内存管理、通信
  • 【喜报】第三届BDDM 会议成功申请 IEEE 冠名,并获得 IEEE 北京分会赞助!
  • 佰力博科技与您探讨电晕极化和油浴极化有什么区别?
  • maven 发布到中央仓库之持续集成-03
  • 当Powerbi遇到quickbi,性能优化方式对比
  • Unity实用技能-背景自适应文本