当前位置: 代码网 > it编程>数据库>Mysql > MySQL常用字符串函数示例和场景介绍

MySQL常用字符串函数示例和场景介绍

2025年07月31日 Mysql 我要评论
字符串是数据处理中最常见的数据类型之一,从存储用户姓名、地址到处理文本内容、日志信息,字符串数据贯穿于各种业务场景,mysql提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析。本文我将

字符串是数据处理中最常见的数据类型之一,从存储用户姓名、地址到处理文本内容、日志信息,字符串数据贯穿于各种业务场景,mysql提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析。本文我将全面且深入地介绍mysql常用的字符串函数,并结合具体示例和场景,帮你熟练掌握这些实用工具。

一、字符串函数概述

1.1 字符串函数的作用

mysql字符串函数能够实现对字符串的多种操作,包括但不限于:

  • 字符串的拼接、截取、替换
  • 大小写转换、去空格
  • 字符串查找、匹配与统计
  • 字符串格式化与加密
    这些函数极大地增强了sql语句对字符串数据的处理能力,使开发者可以在数据库层面完成复杂的字符串操作,减少应用层的处理压力。

1.2 字符串函数分类

根据功能特性,mysql字符串函数可大致分为以下几类:

  • 字符串长度与统计函数
  • 字符串截取与提取函数
  • 字符串连接与拆分函数
  • 字符串查找与匹配函数
  • 字符串转换与格式化函数
  • 字符串加密与解密函数

二、字符串长度与统计函数

2.1 char_length(str)

char_length(str)函数用于返回字符串str的字符数,一个汉字、字母、数字等都算作一个字符。
示例:查询employees表中last_name字段的字符长度

select last_name, char_length(last_name) as length
from employees;

2.2 length(str)

length(str)函数返回字符串str的字节长度。在utf8编码下,一个英文字母占1个字节,一个汉字占3个字节。
示例:查询products表中product_name字段的字节长度

select product_name, length(product_name) as byte_length
from products;

2.3 octet_length(str)

octet_length(str)length(str)功能相同,都是返回字符串的字节长度。

select octet_length('hello, 世界') as octet_length;

三、字符串截取与提取函数

3.1 substring(str, pos)、substring(str, pos, len)

substring(str, pos)从字符串str的第pos个位置开始截取,直到字符串结尾;substring(str, pos, len)从第pos个位置开始截取长度为len的子字符串。
示例:从customers表的phone_number字段中提取后4位号码

select phone_number, substring(phone_number, -4) as last_four_digits
from customers;

3.2 left(str, len)、right(str, len)

left(str, len)返回字符串str最左边len个字符,right(str, len)返回最右边len个字符。
示例:获取orders表中order_number字段的前3位和后3位

select order_number,
       left(order_number, 3) as first_three_digits,
       right(order_number, 3) as last_three_digits
from orders;

3.3 mid(str, pos, len)

mid(str, pos, len)substring(str, pos, len)功能一致,从字符串str的第pos个位置开始截取长度为len的子字符串。

select mid('mysql字符串函数', 4, 6) as extracted_substring;

四、字符串连接与拆分函数

4.1 concat(str1, str2, …)

concat(str1, str2, ...)用于将多个字符串连接成一个字符串。
示例:将employees表中的first_namelast_name连接成完整姓名

select concat(first_name,'', last_name) as full_name
from employees;

4.2 concat_ws(separator, str1, str2, …)

concat_ws(separator, str1, str2, ...)使用指定的分隔符separator连接多个字符串,遇到null值时会跳过,不会返回null
示例:用逗号连接products表中的product_namecategory字段

select concat_ws(', ', product_name, category) as product_info
from products;

4.3 group_concat(expr)

group_concat(expr)将分组后的结果集中的expr列值连接成一个字符串,默认用逗号分隔。
示例:查询每个department的所有employee_name

select department, group_concat(employee_name) as employees
from employees
group by department;

五、字符串查找与匹配函数

5.1 instr(str, substr)

instr(str, substr)返回子字符串substr在字符串str中第一次出现的位置,不存在则返回0。
示例:在customers表的email字段中查找@符号的位置

select email, instr(email, '@') as at_position
from customers;

5.2 locate(substr, str)、position(substr in str)

这两个函数与instr(str, substr)功能相同,都是返回子字符串在字符串中首次出现的位置。

select locate('world', 'hello, world!') as locate_result,
       position('world' in 'hello, world!') as position_result;

5.3 like、not like

like用于模糊匹配,配合通配符%(匹配任意字符序列)和_(匹配单个字符)使用;not like则是取反。
示例:查询customers表中姓名以“张”开头的客户

select *
from customers
where customer_name like '张%';

5.4 regexp、not regexp

regexp支持正则表达式匹配,not regexp为取反。
示例:查询products表中product_name包含数字的产品

select product_name
from products
where product_name regexp '[0-9]';

六、字符串转换与格式化函数

6.1 upper(str)、lower(str)

upper(str)将字符串转换为大写,lower(str)转换为小写。
示例:将employees表中的email字段统一转换为小写

select lower(email) as lower_email
from employees;

6.2 trim([{both | leading | trailing} [remstr] from] str)

trim()用于去除字符串两端的空格或指定字符,leading去除开头,trailing去除结尾,both(默认)去除两端。
示例:去除customers表中address字段两端的空格

select trim(address) as trimmed_address
from customers;

6.3 lpad(str, len, padstr)、rpad(str, len, padstr)

lpad(str, len, padstr)在字符串str左侧填充padstr,使其长度达到lenrpad(str, len, padstr)在右侧填充。
示例:将orders表中的order_id填充为8位,左侧补0

select lpad(order_id, 8, '0') as padded_order_id
from orders;

七、字符串加密与解密函数

7.1 md5(str)

md5(str)计算字符串str的md5哈希值,常用于密码加密(但安全性较低,不建议用于敏感数据)。

select md5('password') as md5_hash;

7.2 sha(str)、sha2(str, hash_length)

sha(str)计算字符串的sha-1哈希值,sha2(str, hash_length)计算sha-2系列哈希值,hash_length可选224、256、384、512。

select sha('data'), sha2('data', 256) as sha2_256_hash;

八、实战案例

8.1 日志分析

在日志表logs中,字段log_message记录了操作信息,需求是提取其中的操作类型(以[开头,]结尾的部分)。

select substring(log_message, instr(log_message, '[') + 1, instr(log_message, ']') - instr(log_message, '[') - 1) as operation_type
from logs;

8.2 用户数据清洗

users表中的phone_number字段进行处理,去除非数字字符,并统一格式为xxx-xxxx-xxxx

select concat(
           left(trim(regexp_replace(phone_number, '[^0-9]', '')), 3),
           '-',
           mid(trim(regexp_replace(phone_number, '[^0-9]', '')), 4, 4),
           '-',
           right(trim(regexp_replace(phone_number, '[^0-9]', '')), 4)
       ) as formatted_phone_number
from users;

到此这篇关于mysql常用字符串函数示例和场景介绍的文章就介绍到这了,更多相关mysql字符串函数内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com