sql >> Database teknologi >  >> RDS >> Sqlserver

TRANSLATE-funktionen i SQL SERVER

REDIGERET:

Jeg føler mig dum - MatBailie påpegede korrekt, at min oprindelige løsning var forkert. Jeg har faktisk altid troet, at TRANSLATE('abc', 'abc', 'bcd') skulle returnere ddd, men efter at have testet SQL Server 2017's TRANSLATE ser jeg, at 'bcd' ville være det rigtige svar. Du kan se min originale (forkerte version) ved at se denne historie af dette indlæg. Her er en opdateret løsning, der bruger 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)');

Returnering> bcd



  1. SQL Server-forespørgsel - beregne tilgængeligheden af ​​lokaler

  2. Anmodninger sidder fast i PG::Connection#async_exec

  3. PostgreSQL-kodningsproblem under udførelse af forespørgsel fra kommandolinjen

  4. Sådan gemmer du en database som en skabelon i Access 2016