代码之家  ›  专栏  ›  技术社区  ›  Ilak

SQL Server:更新以匹配并仅替换准确的单词

  •  0
  • Ilak  · 技术社区  · 6 年前

    下面是我使用的SQL Server查询:

    UPDATE BODYCONTENT 
    SET BODY = CAST(REPLACE(CAST(BODY AS NVARCHAR(MAX)), 'Test' , 'prod') AS NTEXT) 
    WHERE BODY COLLATE Latin1_General_CI_AS LIKE '%Test%' COLLATE Latin1_General_CI_AS;
    

    “test2”、“testtest”、“fastest”更新为“prod”-我想避免这种行为。

    UPDATE BODYCONTENT 
    SET BODY = CAST(REPLACE(CAST(BODY AS NVARCHAR(MAX)), 'Test' , 'prod') AS NTEXT) 
    WHERE BODY COLLATE Latin1_General_CI_AS LIKE '%[^A-Za-z0-9]Test[^A-Za-z0-9]%' COLLATE Latin1_General_CI_AS;
    

    当我使用下面的查询选择“测试”时:

    SELECT * 
    FROM dbo.BODYCONTENT 
    WHERE CONVERT(NVARCHAR(MAX), BODY) = N'Test';
    

      SELECT BODY 
      FROM dbo.BODYCONTENT 
      WHERE BODY LIKE '%Test%';
    
      SELECT BODY 
      FROM dbo.BODYCONTENT 
      WHERE BODY COLLATE Latin1_General_CI_AS like '%TEST%' COLLATE Latin1_General_CI_AS;
    

    Test testtest Test1 Test TEST
    

    预期结果:

    prod testtest Test1 prod prod
    

    prod prodprod prod1 prod prod
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   iamdave    6 年前

    我觉得所有不同版本的 test like 'test' 不工作。

    declare @t table(s ntext);
    insert into @t values('Test testtest Test1 Test TEST');
    
    select s as Original
            ,ltrim(rtrim(replace(
                                replace(
                                        replace(N' ' + cast(s as nvarchar(max)) + N' '  -- Add a single space before and after value,
                                                ,' ','<>'                               -- then replace all spaces with any two characters.
                                                )
                                        ,'>test<','>prod<'      -- Use these two characters to identify single instances of 'test'
                                        )
                                ,'<>',' '       -- Then replace the delimiting characters with spaces and trim the value.
                                )
                        )
                ) as Updated
    from @t;
    

    输出:

    +-------------------------------+-------------------------------+
    |           Original            |            Updated            |
    +-------------------------------+-------------------------------+
    | Test testtest Test1 Test TEST | prod testtest Test1 prod prod |
    +-------------------------------+-------------------------------+
    

    <>