> (you don't have to strictly follow this form)

**Use case**

Change the used aphabet for some encoding (see https://github.com/ClickHouse/ClickHouse/issues/38832,  https://github.com/ClickHouse/ClickHouse/issues/38002 etc), implement  Caesar cipher, change DNA to RNA etc. 

:) 

**Describe the solution you'd like**

Something similar to  [`tr` operator in perl](https://perldoc.perl.org/perlop#tr/SEARCHLIST/REPLACEMENTLIST/cdsr) 

Single pass through the string with all replaces applied. 

```
Select transliterate(dna, 'ACGTacgt', 'TGCAtgca') AS rna
-- if first arg have some characters listed in the   second arg, then they will be replaced by corresponding chars from the third arg
-- other characters are passed as is
```

Or more expressive (but more noisy) format with map

```
Select transliterate(dna,{ 'A' :'T', 'C' :'G',...}) AS rna
```

**Describe alternatives you've considered**

Sequence of replace calls - when aphabet is long (like base64) it looks ugly, and create a lot of copies of the string, so slow. 

{
    registerFunctionLike(factory);
    registerFunctionILike(factory);
    registerFunctionNotLike(factory);
    registerFunctionNotILike(factory);
    registerFunctionMatch(factory);
    registerFunctionExtract(factory);
    registerFunctionReplaceOne(factory);
    registerFunctionReplaceAll(factory);
    registerFunctionReplaceRegexpOne(factory);
    registerFunctionReplaceRegexpAll(factory);
    registerFunctionMultiMatchAny(factory);
    registerFunctionMultiMatchAnyIndex(factory);
    registerFunctionMultiMatchAllIndices(factory);
    registerFunctionMultiFuzzyMatchAny(factory);
    registerFunctionMultiFuzzyMatchAnyIndex(factory);
    registerFunctionMultiFuzzyMatchAllIndices(factory);
    registerFunctionExtractGroups(factory);
    registerFunctionExtractAllGroupsVertical(factory);
    registerFunctionExtractAllGroupsHorizontal(factory);
}
}