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

如何改进SQL姓名大写函数以支持多名字格式处理?

改进SQL函数以处理多名字的首字母大写需求

原函数fn_capitalized仅支持单个名字的首字母大写格式化,当@name参数传入多个以空格分隔的名字(如'john jack')时,仅第一个名字能正确处理,后续名字无法实现首字母大写的效果。以下是改进后的实现方案:

改进后的函数代码

CREATE FUNCTION fn_capitalized(@name varchar(100), @surname varchar(20))
RETURNS VARCHAR(121)
AS
BEGIN
    DECLARE @result varchar(121) = ''
    DECLARE @tempName varchar(20)

    -- 拆分多名字并遍历处理
    DECLARE nameCursor CURSOR FOR
        SELECT value FROM STRING_SPLIT(@name, ' ')
        WHERE value <> '' -- 过滤连续空格产生的空值

    OPEN nameCursor
    FETCH NEXT FROM nameCursor INTO @tempName

    WHILE @@FETCH_STATUS = 0
    BEGIN
        -- 单个名字片段:首字母大写,其余字母小写
        SET @result = @result + ' ' + UPPER(SUBSTRING(@tempName, 1, 1)) + LOWER(SUBSTRING(@tempName, 2, LEN(@tempName)))
        FETCH NEXT FROM nameCursor INTO @tempName
    END

    CLOSE nameCursor
    DEALLOCATE nameCursor

    -- 移除开头空格并拼接全大写姓氏
    SET @result = LTRIM(@result) + ' ' + UPPER(@surname)

    RETURN @result
END

关键改进说明

  • 调整参数和返回值长度:将@name的长度从varchar(20)扩展到varchar(100),返回值对应调整为varchar(121),适配多名字的场景
  • 拆分多名字:使用STRING_SPLIT函数(SQL Server 2016及以上版本支持)将输入的多名字按空格拆分;若使用更低版本的SQL Server,可替换为自定义的字符串拆分逻辑
  • 遍历处理每个名字片段:通过游标遍历拆分后的每个名字,对每个片段执行首字母大写、其余字母小写的格式化
  • 兼容特殊情况:过滤拆分过程中因连续空格产生的空字符串,避免结果出现无效空格
  • 保留原姓氏逻辑:姓氏部分仍保持全大写的格式化规则

测试示例

执行以下语句:

SELECT dbo.fn_capitalized('john jack', 'doe')

返回结果:John Jack DOE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:05:15