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

Jak přenést pole json do textového pole?

zkuste json_array_elements_text místo json_array_elements a nepotřebujete explicitní přetypování na text (x::text ), takže můžete použít:

CREATE or replace FUNCTION json_array_castext(json) RETURNS text[] AS $f$
    SELECT array_agg(x) FROM json_array_elements_text($1) t(x);
$f$ LANGUAGE sql IMMUTABLE;

Pro vaši doplňující otázku

Proč x::text není obsazení?

Toto je přetypováno a kvůli tomu nedává žádnou chybu, ale při přetypování řetězce json na text, jako je tento:::text , postgres přidává k hodnotě uvozovky.

Jen pro testovací účely změňme vaši funkci znovu na původní (jak je to ve vaší otázce) a zkuste:

SELECT  
(json_array_castext('["hello","world"]'))[1] = 'hello',
(json_array_castext('["hello","world"]'))[1],
'hello'

Jak vidíte, (json_array_castext('["hello","world"]'))[1] dává "hello" místo hello . a to byl důvod, proč jste dostali false při porovnávání těchto hodnot.



  1. Jak spustit skript Oracle sql prostřednictvím kódu Java

  2. Jak používat typy unsigned int / long s Entity Framework?

  3. 2 způsoby, jak vytvořit tabulku, pokud v Oracle ještě neexistuje

  4. SQL Server 2008 - řazení podle řetězců s číselným číslem