/ / Konwertuj hex na utf8 w greenplum w regexp_replace - regex, postgresql, hex, greenplum

Konwertuj hex na utf8 w greenplum w regexp_replace - regex, postgresql, hex, greenplum

Mam ciągi w tabeli, które zawierają wartości szesnastkowe takie jak ffffffc4. Przykład jest następujący:

Urzffffffc4ffffff85dzenie zgodne ze standardem High Definition Audio

Poniższy kod może przekonwertować hex na UTF8:

select chr(x"c4"::int)

który wraca Ä ale kiedy próbuję użyć regexp_replace, mam problemy. Próbowałem następujące:

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

gdzie XYZ to różne kodowania źródłowe oferowane w 8.2, ale wszystko, co otrzymuję, to wartość szesnastkowa.

Każdy pomysł, w jaki sposób mogę użyć funkcji chr wewnątrz regexp_replace?

Użyta wersja: PostgreSQL 8.2.15 (baza danych Greenplum 4.1.1.1 build 1) na x86_64-unknown-linux-gnu

Z góry dziękuję za pomoc

Odpowiedzi:

1 dla odpowiedzi № 1

Nie rozumiesz kolejności oceny. Drugi argument do regexp_replace nie jest wywołaniem zwrotnym wywoływanym dla każdego podstawienia „1”.

Co się dzieje, to twoje convert połączenie jest oceniane pierwszy, na wartości dosłownej 1, a ten wynik jest przekazywany do regexp_replace.

W każdym razie SQL nie ocenia nawet nowoczesnego PostgreSQL z powodu bardziej rygorystycznych reguł rzutowania, ponieważ "1" nie jest ważny bytea dosłowny.

W mniej starszej wersji Pg można coś zrobić regexp_split_to_table, chr i string_agg. W 8.2 myślę, że użyjesz PL. Załaduję PL/Perl i napisz prostą funkcję Perla, aby to zrobić. Prawdopodobnie możliwe jest wdrożenie w PL / PgSQL, ale podejrzewam, że jakakolwiek implementacja z funkcjonalnością dostępną w 8.2 będzie pełna i powolna. Chciałbym, aby udowodniono, że się mylę.