SQL字符串处理是数据库开发过程中高频使用的技能,无论是数据清洗、字段拼接还是内容提取,都需要借助对应的字符串函数实现。不同数据库虽然函数语法略有差异,但核心处理逻辑相通,掌握通用思路就能应对大部分场景。

常用SQL字符串函数基础
在编写字符串处理逻辑前,需要先熟悉常用的基础函数,以下是主流数据库通用的核心函数说明:
| 函数名称 | 功能说明 | 示例 |
|---|---|---|
| CONCAT | 拼接多个字符串 | CONCAT('hello',' ','world') 返回 hello world |
| SUBSTRING | 截取指定位置的字符串 | SUBSTRING('abcdef',2,3) 返回 bcd |
| TRIM | 去除字符串首尾空格 | TRIM(' test ') 返回 test |
| REPLACE | 替换字符串中的指定内容 | REPLACE('a-b-c','-','_') 返回 a_b_c |
| CHARINDEX/INSTR | 查找指定字符的位置 | INSTR('abcde','c') 返回 3 |
真实案例一:用户手机号脱敏处理
业务场景中经常需要对用户敏感信息进行脱敏,比如手机号只展示前3位和后4位,中间用星号替换。假设用户表user_info中有phone字段存储11位手机号,处理逻辑如下:
-- 手机号脱敏,保留前3位和后4位,中间替换为4个星号
SELECT
user_id,
phone,
CONCAT(
SUBSTRING(phone,1,3), -- 截取前3位
'****', -- 中间填充星号
SUBSTRING(phone,8,4) -- 截取后4位,11位手机号第8位开始是后4位
) AS masked_phone
FROM user_info
WHERE phone IS NOT NULL;
如果手机号长度不固定,可以先通过CHARINDEX判断长度,再动态调整截取逻辑,避免截取错误。
真实案例二:订单地址拆分提取
订单表中常把完整地址存为一个字段,格式为“省-市-区-详细地址”,需要拆分出省、市、区三个独立字段。以MySQL为例,处理逻辑如下:
-- 拆分地址字段为省、市、区
SELECT
order_id,
full_address,
-- 提取省:第一个横杠之前的内容
SUBSTRING(full_address,1,INSTR(full_address,'-')-1) AS province,
-- 提取市:第一个横杠和第二个横杠之间的内容
SUBSTRING(
full_address,
INSTR(full_address,'-')+1,
INSTR(full_address,'-',INSTR(full_address,'-')+1) - INSTR(full_address,'-') -1
) AS city,
-- 提取区:第二个横杠和第三个横杠之间的内容
SUBSTRING(
full_address,
INSTR(full_address,'-',INSTR(full_address,'-')+1)+1,
INSTR(full_address,'-',INSTR(full_address,'-',INSTR(full_address,'-')+1)+1) - INSTR(full_address,'-',INSTR(full_address,'-')+1) -1
) AS district
FROM order_table
WHERE full_address LIKE '%-%-%-%';
这里通过嵌套调用INSTR函数找到每个横杠的位置,再结合SUBSTRING截取对应区间的内容,实现地址拆分。
真实案例三:复杂查询中的字符串条件拼接
在统计报表场景中,需要根据多个筛选条件动态拼接查询条件,比如根据用户输入的标签列表查询匹配的商品。假设商品表product有tags字段存储逗号分隔的标签,需要查询包含“数码”和“新品”两个标签的商品:
-- 查询同时包含数码和新品标签的商品
SELECT
product_id,
product_name,
tags
FROM product
WHERE
-- 确保标签字符串首尾有逗号,方便匹配完整标签
CONCAT(',',REPLACE(tags,',',','),',') LIKE '%,数码,%'
AND CONCAT(',',REPLACE(tags,',',','),',') LIKE '%,新品,%';
这里先统一把中文逗号和英文逗号,再在标签字符串首尾加逗号,避免匹配到包含“数码产品”这类非完整标签的内容,提升查询准确性。
字符串处理优化建议
- 尽量避免在WHERE条件中对字段做字符串函数处理,会导致索引失效,可提前对查询值做处理再匹配。
- 处理大量字符串拼接时,优先使用数据库原生的拼接函数,比手动拼接效率更高。
- 复杂字符串逻辑可以先通过子查询拆分步骤,再组合结果,降低单条SQL的复杂度。
掌握SQL字符串处理的编写逻辑,不仅能解决单一的数据处理需求,还能和分组、关联等复杂查询结合,应对更多业务场景。平时可以多结合真实业务需求练习,熟悉不同函数的组合用法,逐步提升复杂查询的编写能力。