You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中如何循环遍历字符串实现数值批量除以10的处理

SQL Server字符串数值批量处理实现方案

原代码问题排查

你提交的自定义函数存在以下几类错误,导致无法得到预期结果:

  • 语法错误:返回值定义RETURNS varchar(120缺少右括号,无法正常编译
  • 核心逻辑反向:需求是仅处理纯数字片段除以10,保留F1这类混合字母数字的字段名,原有判断条件刚好写反,且会出现类型转换报错
  • 变量未初始化:@Concat默认值为NULL,字符串拼接操作会一直返回NULL
  • 边界值未兼容:字符串最后一个元素后没有空格,CHARINDEX返回0会导致截取逻辑报错
  • 字符串更新逻辑错误:使用REPLACE更新原字符串会误替换重复出现的子串,应该直接截取剩余部分

正确实现代码

ALTER FUNCTION [name_of_function]
    (@Chain varchar(120)) 
RETURNS varchar(120)
AS
BEGIN
    DECLARE @Result varchar(120) = '', @Pos int, @CurrentSeg varchar(50)
    -- 末尾补空格统一处理最后一个元素的截取逻辑
    SET @Chain = @Chain + ' '

    WHILE LEN(@Chain) > 0
    BEGIN
         SET @Pos = CHARINDEX(' ', @Chain)
         IF @Pos = 0 BREAK
         SET @CurrentSeg = SUBSTRING(@Chain, 1, @Pos - 1)
         
         -- 判断当前片段是否为纯数字
         IF @CurrentSeg NOT LIKE '%[^0-9]%'
         BEGIN
             -- 纯数字先转int除以10,再拼接
             SET @Result += CAST(CAST(@CurrentSeg AS INT) / 10 AS VARCHAR(10)) + ' '
         END
         ELSE
         BEGIN
             -- 非数字片段直接保留
             SET @Result += @CurrentSeg + ' '
         END

         -- 直接截取空格后的剩余部分,避免误替换
         SET @Chain = SUBSTRING(@Chain, @Pos + 1, LEN(@Chain) - @Pos)
   END
   -- 移除末尾多余的空格后返回
   RETURN RTRIM(@Result)
END

调用验证

输入参数为'F1 100 F2 400 F3 600'时,返回结果为'F1 10 F2 40 F3 60',完全符合需求。

内容的提问来源于stack exchange,提问作者Noelia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 03:24:02