Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Funkcja TRANSLATE w SQL SERVER

EDYTOWANO:

Czuję się głupio - MatBailie słusznie zauważył, że moje oryginalne rozwiązanie było błędne. Właściwie zawsze myślałem, że TRANSLATE('abc', 'abc', 'bcd') miał zwrócić ddd, ale po przetestowaniu TRANSLATE SQL Server 2017 widzę, że 'bcd' byłoby poprawną odpowiedzią. Możesz zobaczyć moją oryginalną (nieprawidłową wersję) przeglądając historię tego posta. Oto zaktualizowane rozwiązanie, które wykorzystuje 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)');

Zwroty> bcd



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wykonać 32-bitowy pakiet SSIS w pakiecie 64-bitowym?

  2. Nie można połączyć się z serwerem — błąd związany z siecią lub specyficzny dla instancji

  3. Konwertuj typ danych obrazu na ciąg w SQL Server

  4. Jak zwrócić przyrostowy numer grupy na grupę w SQL?

  5. Częściowe słowa w dowolnym tekście na serwerze SQL