PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Konwertuj znak Unicode ze znakami unikodowymi z powrotem na rzeczywisty znak w PostgreSQL

Jedna stara sztuczka polega na używaniu do tego celu parsera:

postgres=# select e'Telefon\u00ED kontakty';
     ?column?      
-------------------
 Telefoní kontakty
(1 row)

CREATE OR REPLACE FUNCTION public.unescape(text)
RETURNS text
LANGUAGE plpgsql
AS $function$
DECLARE result text;
BEGIN
  EXECUTE format('SELECT e''%s''', $1) INTO result;
  RETURN result;
END;
$function$

Działa, ale jest podatny na wstrzyknięcie SQL - więc powinieneś najpierw oczyścić tekst wejściowy!

Tutaj jest mniej czytelna, ale bezpieczna wersja - ale musisz ręcznie określić jeden znak jako symbol ucieczki:

CREATE OR REPLACE FUNCTION public.unescape(text, text) 
 RETURNS text
 LANGUAGE plpgsql
 AS $function$
 DECLARE result text;
 BEGIN
   EXECUTE format('SELECT U&%s UESCAPE %s', 
                         quote_literal(replace($1, '\u','^')),
                         quote_literal($2)) INTO result;
   RETURN result;
 END;
 $function$

Wynik

postgres=# select unescape('Odpov\u011Bdn\u00E1 osoba','^');
    unescape     
-----------------
 Odpovědná osoba
(1 row)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql wybierz aż do osiągnięcia określonej łącznej kwoty

  2. PostgreSQL konwertuje kolumny na wiersze? Transponować?

  3. CONSTRAINT do sprawdzania wartości ze zdalnie powiązanej tabeli (poprzez połączenie itp.)

  4. Jak działa Z WYJĄTKIEM w PostgreSQL

  5. Zbieraj rekurencyjne klucze JSON w Postgres