sql >> Databáze >  >> RDS >> Sqlserver

Funkce TRANSLATE v SQL SERVER

UPRAVENO:

Cítím se hloupě - MatBailie správně poukázal na to, že moje původní řešení bylo nesprávné. Vlastně jsem si vždycky myslel, že TRANSLATE('abc', 'abc', 'bcd') měl vrátit ddd, ale po testování SQL Server 2017 TRANSLATE vidím, že 'bcd' by byla správná odpověď. Moji původní (nesprávnou verzi) můžete vidět v této historii tohoto příspěvku. Zde je aktualizované řešení, které používá 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)');

Vrátí se> bcd



  1. Proč příkaz 'explain' přináší různé výsledky na stejném příkazu SQL?

  2. MySQL / PHP - Najděte dostupné časové úseky

  3. Použití Dapper s SQL Spatial Types jako parametrem

  4. Rails Migration Create Table Primary Key