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

SQL Server中查找varchar列非标准Unicode空格的T-SQL脚本求助

查找varchar列中非标准空格类Unicode字符的T-SQL脚本

针对你遇到的迁移后varchar(4000)列存在非标准空格的问题,以下是直接可用的T-SQL脚本,覆盖常见的Unicode空格类型(普通空格Char(32)以外的空格类字符):

1. 定位包含非标准空格的行及具体字符

这个脚本会遍历目标列的每个字符,找出所有属于非标准空格的Unicode字符,并列出对应的码点:

SELECT 
    [主键列], -- 替换为你的表主键列名
    [受影响列], -- 替换为你的目标列名
    -- 聚合显示该行包含的所有非标准空格信息
    STRING_AGG(CONCAT('U+', FORMAT(UNICODE(SUBSTRING([受影响列], n, 1)), 'X4'), ' (', SUBSTRING([受影响列], n, 1), ')'), ', ') AS 非标准空格详情
FROM 
    [你的表名] -- 替换为实际表名
CROSS APPLY 
    -- 生成行号遍历列中每个字符
    (SELECT TOP (LEN([受影响列])) n = ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM sys.all_columns) AS numbers
WHERE 
    -- 匹配常见非标准空格的Unicode码点
    UNICODE(SUBSTRING([受影响列], n, 1)) IN (
        0x00A0, -- 不换行空格(NBSP)
        0x2000, -- 全角空格(EN QUAD)
        0x2001, -- 全角空格(EM QUAD)
        0x2002, -- 半角空格(EN SPACE)
        0x2003, -- 全角空格(EM SPACE)
        0x2004, -- 三分之一全角空格
        0x2005, -- 四分之一全角空格
        0x2006, -- 六分之一全角空格
        0x2007, -- 数字空格
        0x2008, -- 标点空格
        0x2009, -- 窄空格
        0x200A, -- 极窄空格
        0x202F, -- 窄不换行空格
        0x205F, -- 中等数学空格
        0x3000  -- 中文全角空格
    )
GROUP BY 
    [主键列], [受影响列];

2. 批量替换非标准空格为普通空格

如果需要直接修复数据,可使用这个脚本(执行前务必先备份数据):

UPDATE [你的表名]
SET [受影响列] = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
    REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
        REPLACE(CAST([受影响列] AS NVARCHAR(4000)), NCHAR(0x00A0), ' '),
        NCHAR(0x2000), ' '), NCHAR(0x2001), ' '), NCHAR(0x2002), ' '),
        NCHAR(0x2003), ' '), NCHAR(0x2004), ' '), NCHAR(0x2005), ' '),
        NCHAR(0x2006), ' '), NCHAR(0x2007), ' '), NCHAR(0x2008), ' '),
        NCHAR(0x2009), ' '), NCHAR(0x200A), ' '), NCHAR(0x202F), ' '),
        NCHAR(0x205F), ' '), NCHAR(0x3000), ' ')
WHERE 
    -- 过滤出确实包含非标准空格的行,避免全表更新
    CAST([受影响列] AS NVARCHAR(4000)) LIKE '%[' + 
    NCHAR(0x00A0) + NCHAR(0x2000) + NCHAR(0x2001) + NCHAR(0x2002) +
    NCHAR(0x2003) + NCHAR(0x2004) + NCHAR(0x2005) + NCHAR(0x2006) +
    NCHAR(0x2007) + NCHAR(0x2008) + NCHAR(0x2009) + NCHAR(0x200A) +
    NCHAR(0x202F) + NCHAR(0x205F) + NCHAR(0x3000) + ']%';

注意事项

  • 脚本中的[主键列]、[受影响列]、[你的表名]需要替换为实际的对象名称
  • 执行更新脚本前,建议先执行对应的SELECT语句验证替换结果
  • 如果遇到未覆盖的特殊空格字符,可以扩展IN子句中的Unicode码点范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:55:16