TRANSLATE function in SQL SERVER

后端 未结 5 1717
醉酒成梦
醉酒成梦 2021-01-26 20:48

I read that there is a function equivalent to the standard function TRANSLATE under DB2 under SQL Server 2017. But how to do under earlier versions?

For definition of fu

5条回答
  •  滥情空心
    2021-01-26 21:06

    EDITED:

    I'm feeling dumb - MatBailie correctly pointed out that my original solution was incorrect. I actually always thought that TRANSLATE('abc', 'abc', 'bcd') was supposed to return ffffd but, after testing SQL Server 2017's TRANSLATE I see that 'bcd' would be the correct answer. You can see my original (incorrect version) by looking at this history of this post. Here's an updated solution that uses ngrams8k:

    DECLARE
      @string varchar(8000)  = 'abc',
      @fromChar varchar(100) = 'abc', -- note: no mutation
      @toChar varchar(100)   = 'bcd';
    
    SELECT newString = 
    (
      SELECT CASE WHEN x>z THEN '' WHEN x>0 THEN s ELSE t END+''
      FROM dbo.ngrams8k(@string,1) ng
      CROSS APPLY (VALUES (charindex(ng.token,@fromChar),len(@toChar),ng.token)) x(x,z,t)
      CROSS APPLY (VALUES (ng.position, substring(@toChar,x.x,1))) xx(p,s)
      ORDER BY xx.p
      FOR XML PATH(''), TYPE
    ).value('(text())[1]', 'varchar(8000)');
    

    Returns > bcd

提交回复
热议问题