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

SQL Server实现字符串缩写功能输出异常问题咨询

SQL Server 2008 R2 自定义缩写函数修复方案

问题根因

原有代码逻辑错误地直接截取了整个输入字符串的前5个字符,而非规则要求的「第一个单词的前5个字符」,导致第一个单词之后的空格和相邻字符被误计入前缀部分,后续遍历又重复提取对应单词首字母,最终输出不符合预期。

修改后完整函数代码

ALTER FUNCTION [dbo].[fnFirsties5] ( @str NVARCHAR(4000) )
RETURNS NVARCHAR(2000)
AS
BEGIN
    DECLARE @retval NVARCHAR(2000)
    DECLARE @firstSpacePos INT

    -- 预处理首尾空格
    SET @str = RTRIM(LTRIM(@str))
    IF @str IS NULL OR LEN(@str) = 0
        RETURN ''

    -- 定位第一个空格位置,拆分第一个单词
    SET @firstSpacePos = CHARINDEX(' ', @str, 1)

    IF @firstSpacePos = 0
        -- 只有一个单词的情况,直接取前5个字符
        SET @retval = LEFT(@str, 5)
    ELSE
    BEGIN
        -- 取第一个单词的前5个字符作为前缀
        SET @retval = LEFT(LEFT(@str, @firstSpacePos - 1), 5)
        -- 截断字符串,保留第一个空格之后的所有内容
        SET @str = LTRIM(RIGHT(@str, LEN(@str) - @firstSpacePos))

        -- 遍历剩余所有单词,逐个取首字母拼接
        WHILE CHARINDEX(' ', @str, 1) > 0
        BEGIN
            SET @retval += LEFT(@str, 1)
            SET @str = LTRIM(RIGHT(@str, LEN(@str) - CHARINDEX(' ', @str, 1)))
        END
        -- 拼接最后一个单词的首字母
        SET @retval += LEFT(@str, 1)
    END

    RETURN @retval
END

验证效果

用给出的测试用例验证:

  • 输入Key Account Sales → 输出KeyAS
  • 输入HR General → 输出HRG
  • 输入Production Operator → 输出ProduO
    完全匹配预期输出要求,兼容SQL Server 2008 R2版本的语法特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:06:05