sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan caster jeg json-array til tekst-array?

prøv json_array_elements_text i stedet for json_array_elements , og du behøver ikke eksplicit casting til tekst (x::text ), så du kan bruge:

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;

Til dit yderligere spørgsmål

Hvorfor er x::text ikke en rollebesætning?

Dette er castet og på grund af dette giver det ikke nogen fejl, men når du caster json-strengen til tekst som denne:::text , postgres tilføjer citater til værdi.

Bare for testformål, lad os ændre din funktion til original igen (som det er i dit spørgsmål) og prøv:

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

Som du kan se, (json_array_castext('["hello","world"]'))[1] giver "hello" i stedet for hello . og det var derfor, du fik false når man sammenligner disse værdier.



  1. Oprettelse af visuel database med MySQL Workbench

  2. Databaseskift og failover for Drupal-websteder, der bruger MySQL eller PostgreSQL

  3. Søg i alle felter i alle tabeller for en bestemt værdi (Oracle)

  4. Om fordelene ved sorterede stier