/ / Convert hex para utf8 em greenplum em regexp_replace - regex, postgresql, hex, greenplum

Converte hex para utf8 em greenplum em regexp_replace - regex, postgresql, hex, greenplum

Eu tenho seqüências de caracteres em uma tabela que contêm valores hexadecimais como ffffffc4. Um exemplo é o seguinte:

Urzffffffc4ffffff85dzenie zgodne ze standardem High Definition Audio

O código a seguir pode converter o hex em UTF8:

select chr(x"c4"::int)

que retorna Ä mas quando eu tento usar um regexp_replace eu entro em problemas. Eu tentei o seguinte:

select regexp_replace(sal_input, E"\f{6}(..)",convert(E"\1","xyz","UTF8"),"g")

Onde XYZ são as várias codificações de fonte oferecidas em 8.2, mas tudo que eu recebo é o valor hexadecimal.

Qualquer ideia de como eu poderia usar a função chr dentro regexp_replace?

Versão utilizada: PostgreSQL 8.2.15 (Greenplum Database 4.1.1.1 build 1) no x86_64-unknown-linux-gnu

Obrigado antecipadamente pela ajuda

Respostas:

1 para resposta № 1

Você está entendendo mal a ordem da avaliação. O segundo argumento para regexp_replace Não é chamado um retorno de chamada para cada substituição de "1".

O que acontece é que o seu convert chamada é avaliada primeiro, no valor literal 1, e esse resultado é passado para regexp_replace.

Em qualquer caso, o SQL nem sequer avalia em um PostgreSQL moderno por causa de regras de transmissão mais estritas, como "1" não é um válido bytea literal.

Em uma versão de Pg menos antiga, seria possível fazer algo com regexp_split_to_table, chr e string_agg. Em 8.2, eu acho que você vai estar usando um PL. PL/Perl e escreva uma função Perl simples para fazer isso. É provável que seja possível implementar em PL / PgSQL, mas suspeito que qualquer implementação com a funcionalidade disponível em 8.2 será detalhada e lenta. Eu adoraria estar errado.