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

SQL Server 2016视图中实现INITCAP及XML编码字符处理问询

SQL Server 2016 视图中实现INITCAP及FOR XML编码处理方案

一、INITCAP功能实现(无自定义函数/存储过程)

SQL Server 2016无内置INITCAP函数,且STRING_SPLIT无法保证拆分顺序、STRING_AGG为2017+版本功能。采用递归CTE拆分字符串+大小写转换+XML拼接方案,确保单词顺序和功能正确性:

CREATE VIEW vw_InitCapResult
AS
SELECT 
    t.OriginalString,
    STUFF((
        SELECT ' ' + UPPER(LEFT(s.Word, 1)) + LOWER(SUBSTRING(s.Word, 2, LEN(s.Word)))
        FROM (
            -- 递归CTE按空格拆分,通过Ordinal列严格保留单词顺序
            WITH SplitCTE AS (
                SELECT 
                    1 AS Ordinal,
                    CHARINDEX(' ', t.OriginalString + ' ') AS NextSpace,
                    LEFT(t.OriginalString, CHARINDEX(' ', t.OriginalString + ' ') - 1) AS Word,
                    t.OriginalString AS Remaining
                FROM YourBaseTable t
                UNION ALL
                SELECT 
                    sc.Ordinal + 1,
                    CHARINDEX(' ', sc.Remaining + ' ', sc.NextSpace + 1),
                    SUBSTRING(sc.Remaining, sc.NextSpace + 1, CHARINDEX(' ', sc.Remaining + ' ', sc.NextSpace + 1) - sc.NextSpace - 1),
                    sc.Remaining
                FROM SplitCTE sc
                WHERE sc.NextSpace < LEN(sc.Remaining)
            )
            SELECT Word FROM SplitCTE WHERE Word <> '' -- 过滤连续空格产生的空单词
        ) s
        FOR XML PATH(''), TYPE
    ).value('.', 'nvarchar(max)'), 1, 1, '') AS InitCapResult
FROM YourBaseTable t

核心细节:

  • 递归CTE通过Ordinal字段保证拆分后单词的原始顺序,替代无顺序的STRING_SPLIT
  • 对每个单词执行首字母大写、其余小写的转换逻辑
  • 用FOR XML PATH(''), TYPE配合.value('.', 'nvarchar(max)')拼接,同时规避特殊字符编码问题

二、FOR XML编码字符通用处理方法

使用FOR XML拼接时,&、<、>等特殊字符会被编码为XML实体(如&amp;、&lt;),直接提取会导致字符异常。通用解决方式如下:

正确拼接逻辑

必须使用FOR XML PATH(''), TYPE生成XML类型结果,再通过.value('.', 'nvarchar(max)')提取值,XML实体将自动还原为原始字符:

-- 示例:拼接含特殊字符的字段内容
SELECT 
    STUFF((
        SELECT '|' + ColumnWithSpecialChars
        FROM YourTable
        FOR XML PATH(''), TYPE
    ).value('.', 'nvarchar(max)'), 1, 1, '') AS CombinedResult

注意事项

  • 禁止直接使用FOR XML PATH('')生成字符串(无TYPE关键字),否则特殊字符会被永久编码
  • 该方案可覆盖所有XML敏感字符(如双引号"),无需额外写REPLACE替换逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:55:21