PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Преобразувайте екранизирания символ на Unicode обратно в действителен знак в PostgreSQL

Един стар трик е използването на анализатор за тази цел:

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$

Работи, но е уязвим за инжектиране на SQL - така че първо трябва да дезинфекцирате въведения текст!

Ето по-малко четлива, но безопасна версия - но трябва ръчно да посочите един знак като 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$

Резултат

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. Как да получа min/max от две цели числа в Postgres/SQL?

  2. Преглед на компилацията точно навреме (JIT) за PostgreSQL

  3. Как да създадете нова база данни с вече инсталирано разширение hstore?

  4. Вземете краткото име на деня в PostgreSQL

  5. Как да архивирате и възстановите PostgreSQL база данни чрез DBeaver