STUFF 函数

在 SQL Server 2017 中,STUFF 函数是一个非常实用的字符串处理函数,它可以将字符串的一部分替换为另一个字符串,或者直接删除特定位置的字符。下面详细介绍它的语法、用法和示例。

基本语法

sql 复制代码
STUFF(源字符串, 起始位置, 删除长度, 替换字符串)
  • 源字符串:需要处理的原始字符串。
  • 起始位置:从哪个位置开始删除或替换(位置从 1 开始计数)。
  • 删除长度:要删除的字符数量。
  • 替换字符串 :用于替换删除部分的新字符串(如果为空字符串 '',则仅删除不替换)。

核心功能

1. 替换部分字符串

用新字符串替换源字符串中的指定部分。 示例

sql 复制代码
SELECT STUFF('HelloWorld', 6, 0, ' ') AS Result; -- 输出:Hello World
  • 解释 :从位置 6 开始(W),删除 0 个字符,插入空格 ' '

2. 删除部分字符串

通过指定替换字符串为空 '',删除源字符串中的指定部分。 示例

sql 复制代码
SELECT STUFF('HelloWorld', 6, 5, '') AS Result; -- 输出:Hello
  • 解释 :从位置 6 开始,删除 5 个字符(World),并用空字符串替换。

3. 插入字符串

通过指定删除长度为 0,在源字符串的指定位置插入新字符串。 示例

sql 复制代码
SELECT STUFF('Hello', 6, 0, ' World') AS Result; -- 输出:Hello World
  • 解释 :从位置 6 开始(即字符串末尾),删除 0 个字符,插入 ' World'

常见应用场景

1. 格式化字符串

在字符串中插入分隔符(如添加连字符、逗号等)。 示例:格式化电话号码

sql 复制代码
SELECT STUFF(STUFF('1234567890', 4, 0, '-'), 8, 0, '-') AS FormattedPhone;
-- 输出:123-4567-890

2. 删除特定位置的字符

移除字符串中的前缀或后缀。 示例 :移除前缀 'A'

sql 复制代码
SELECT STUFF('A25060003', 1, 1, '') AS Result; -- 输出:25060003

3. 动态构建字符串

结合其他函数(如 SUBSTRINGLEN)处理复杂场景。 示例:替换中间部分字符

sql 复制代码
DECLARE @str VARCHAR(50) = 'ABCDEFG';
SELECT STUFF(@str, 3, 3, 'XYZ') AS Result; -- 输出:ABXYZFG

注意事项

  1. 起始位置必须大于 0
    如果起始位置为 0 或负数,会返回错误。
  2. 删除长度为 0 时插入字符串
    删除长度 = 0,则直接在 起始位置 插入 替换字符串
  3. 删除长度超过源字符串长度
    起始位置 + 删除长度 > 源字符串长度,则从 起始位置 到字符串末尾的所有字符都会被删除。
  4. NULL 值处理
    如果任一参数为 NULL,则返回 NULL

对比其他函数

  • REPLACE 函数 :替换所有匹配的字符串(不定位位置)。

    sql 复制代码
    SELECT REPLACE('HelloWorld', 'World', 'SQL') -- 输出:HelloSQL
  • SUBSTRING 函数 :截取字符串的一部分(不替换)。

    sql 复制代码
    SELECT SUBSTRING('HelloWorld', 6, 5) -- 输出:World

总结

STUFF 函数在处理需要定位替换或删除的场景中非常高效,特别是在格式化字符串、数据清洗或动态生成 SQL 语句时。通过合理组合起始位置、删除长度和替换字符串,可以灵活实现多种字符串操作。

相关推荐
DBA_G7 分钟前
GBase 8a数据库执行计划查看方式解析
数据库
初願致夕霞13 分钟前
MySQL_事务(MVCC机制详解)
数据库·mysql
cspttty29 分钟前
银行数据分析校招能力模型:SQL、指标体系、可视化与AI辅助分析
数据库
这个DBA有点耶1 小时前
AI Agent操作数据库的安全边界:只读沙箱、操作预演与自动回滚如何落地?
数据库·sql·程序人生·aigc·数据库架构·dba
ss2732 小时前
Java全栈实战 | 1.3-03 索引原理:联合索引 (a,b,c) 只查 b 走不了索引?B+ 树一图讲透所有索引玄学
java·数据库
聚美智数2 小时前
车辆合格证OCR识别-机动车合格证识别-车辆合格证OCR‑机动车出厂证解析‑整车参数提取 API 接口介绍
数据库·经验分享
DBA_G2 小时前
南大通用技术分享:GBase 8a数据库执行计划架构原理解析
数据库
QQ_21696290962 小时前
基于SpringBoot+Vue的小生活平台的设计与实现
java·数据库·vue.js·spring boot·spring·微信小程序·生活
考虑考虑10 小时前
数据库中的EXISTS
运维·数据库·后端
Wang's Blog10 小时前
Java框架快速入门: Spring Security+OAuth2之数据库和实体类的RBAC改造
java·数据库·spring