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

SQL Server中动态合并相似名称的解决方案咨询

在SQL Server中合并相似名称的可行方案

针对数据表Name字段存在的空格差异、简称与全称差异等相似名称合并需求,以下是几种实用的实现方式:

1. 自定义映射表(精准可控首选)

如果相似名称的对应规则明确,建立映射表维护原始名称到统一名称的对应关系,是最可靠的解决方式。

操作步骤:

  • 创建映射表:
CREATE TABLE NameMapping (
    OriginalName NVARCHAR(100) NOT NULL PRIMARY KEY,
    UnifiedName NVARCHAR(100) NOT NULL
);
  • 插入映射规则(按需补充所有相似名称对):
INSERT INTO NameMapping (OriginalName, UnifiedName)
VALUES 
    ('Sometimes ', 'Sometimes'),
    (' SomeTimes', 'Sometimes'),
    ('ABCDE', 'ABCDE集团'),
    ('SSS', 'ABCDE集团');
  • 查询时关联映射表替换名称:
SELECT 
    t.ID,
    COALESCE(m.UnifiedName, t.Name) AS UnifiedName,
    t.OtherColumns
FROM YourTable t
LEFT JOIN NameMapping m ON t.Name = m.OriginalName;

若要直接更新原表数据:

UPDATE t
SET t.Name = m.UnifiedName
FROM YourTable t
JOIN NameMapping m ON t.Name = m.OriginalName;

2. 正则替换处理空格类差异

针对前后空格、中间多空格的相似名称,可通过字符串函数组合清理:

处理前后空格:

SELECT 
    ID,
    LTRIM(RTRIM(Name)) AS UnifiedName,
    OtherColumns
FROM YourTable;

处理中间多空格:

WITH CleanedNames AS (
    SELECT 
        ID,
        Name,
        OtherColumns,
        -- 嵌套替换多空格为单个空格
        REPLACE(REPLACE(REPLACE(Name, '  ', ' '), '  ', ' '), '  ', ' ') AS TempName
    FROM YourTable
)
SELECT 
    ID,
    LTRIM(RTRIM(TempName)) AS UnifiedName,
    OtherColumns
FROM CleanedNames;

3. 模糊匹配与聚合(规则不明确场景)

如果相似名称无固定规则,可通过发音匹配或前缀/后缀匹配分组后统一命名:

基于SOUNDEX发音分组(适合英文名称):

WITH GroupedNames AS (
    SELECT 
        Name,
        MIN(Name) OVER (PARTITION BY SOUNDEX(Name)) AS UnifiedName
    FROM YourTable
)
UPDATE GroupedNames
SET Name = UnifiedName
WHERE Name != UnifiedName;

前缀匹配处理简称与全称(如"ABCDE"对应"ABCDE集团"):

SELECT 
    t1.Name AS OriginalName,
    COALESCE(t2.Name, t1.Name) AS UnifiedName
FROM YourTable t1
LEFT JOIN YourTable t2 
    ON t1.Name LIKE t2.Name + '%' 
    AND LEN(t2.Name) > LEN(t1.Name)
GROUP BY t1.Name, t2.Name;

4. 自定义函数封装转换逻辑

如果需要复用相似名称转换规则,可编写自定义标量函数:

CREATE FUNCTION dbo.GetUnifiedName(@OriginalName NVARCHAR(100))
RETURNS NVARCHAR(100)
AS
BEGIN
    DECLARE @CleanedName NVARCHAR(100) = LTRIM(RTRIM(@OriginalName));
    -- 清理多空格
    SET @CleanedName = REPLACE(REPLACE(@CleanedName, '  ', ' '), '  ', ' ');
    -- 处理简称全称映射
    SET @CleanedName = CASE 
        WHEN @CleanedName IN ('SSS', 'ABCDE') THEN 'ABCDE集团'
        WHEN @CleanedName LIKE '%Sometimes%' THEN 'Sometimes'
        ELSE @CleanedName
    END;
    RETURN @CleanedName;
END;

调用函数获取统一名称:

SELECT 
    ID,
    dbo.GetUnifiedName(Name) AS UnifiedName,
    OtherColumns
FROM YourTable;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:52:23