sql >> Database >  >> RDS >> PostgreSQL

Hoe json-array naar tekstarray te casten?

probeer json_array_elements_text in plaats van json_array_elements , en je hoeft niet expliciet naar tekst te casten (x::text ), zodat u kunt gebruiken:

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;

Voor uw aanvullende vraag

Waarom is x::text geen cast?

Dit is cast en daarom geeft het geen foutmelding, maar bij het casten van json string naar tekst als volgt:::text , postgres voegt aanhalingstekens toe aan waarde.

Laten we, alleen voor testdoeleinden, uw functie weer in origineel veranderen (zoals in uw vraag) en proberen:

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

Zoals je ziet, (json_array_castext('["hello","world"]'))[1] geeft "hello" in plaats van hello . en daarom kreeg je false bij het vergelijken van die waarden.



  1. Verbind ODBC-toepassingen op Windows met SugarCRM

  2. Auditlogboekregistratie voor PostgreSQL

  3. MySQL:record invoegen indien niet aanwezig in tabel

  4. Haal de laatste datum uit gegroepeerde MySQL-gegevens