sql >> Databáze >  >> RDS >> PostgreSQL

Převeďte uniklý znak Unicode zpět na skutečný znak v PostgreSQL

Jeden starý trik je použití parseru pro tento účel:

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$

Funguje to, ale je zranitelné vkládáním SQL - takže byste měli nejprve dezinfikovat vstupní text!

Zde je méně čitelná, ale bezpečná verze - ale musíte ručně zadat jeden znak jako symbol escape:

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$

Výsledek

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



  1. EM 12c Úprava prahových hodnot

  2. NULL vs. `nekonečno` v typech rozsahů PostgreSQL

  3. Jaké nejdelší možné celosvětové telefonní číslo bych měl zvážit v SQL varchar(length) for phone

  4. SQL Server Uživatelem definované funkce