> (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. 

namespace DB
{
class FunctionFactory;
void registerFunctionLike(FunctionFactory &);
void registerFunctionILike(FunctionFactory &);
void registerFunctionNotLike(FunctionFactory &);
void registerFunctionNotILike(FunctionFactory &);
void registerFunctionMatch(FunctionFactory &);
void registerFunctionExtract(FunctionFactory &);
void registerFunctionReplaceOne(FunctionFactory &);
void registerFunctionReplaceAll(FunctionFactory &);
void registerFunctionReplaceRegexpOne(FunctionFactory &);
void registerFunctionReplaceRegexpAll(FunctionFactory &);
void registerFunctionMultiMatchAny(FunctionFactory &);
void registerFunctionMultiMatchAnyIndex(FunctionFactory &);
void registerFunctionMultiMatchAllIndices(FunctionFactory &);
void registerFunctionMultiFuzzyMatchAny(FunctionFactory &);
void registerFunctionMultiFuzzyMatchAnyIndex(FunctionFactory &);
void registerFunctionMultiFuzzyMatchAllIndices(FunctionFactory &);
void registerFunctionExtractGroups(FunctionFactory &);
void registerFunctionExtractAllGroupsVertical(FunctionFactory &);
void registerFunctionExtractAllGroupsHorizontal(FunctionFactory &);
void registerFunctionsStringRegexp(FunctionFactory & factory)