sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur castar man json array till text array?

försök med json_array_elements_text istället för json_array_elements , och du behöver inte explicit casting till text (x::text ), så att du kan använda:

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;

För din ytterligare fråga

Varför är x::text inte en rollbesättning?

Detta är cast och på grund av detta ger det inget fel, men när man castar json-sträng till text så här:::text , postgres lägger till citat till värde.

Bara för teständamål, låt oss ändra din funktion till original igen (som det står i din fråga) och försök:

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

Som du ser, (json_array_castext('["hello","world"]'))[1] ger "hello" istället för hello . och det var därför du fick false när man jämför dessa värden.



  1. Hur pratar Access med ODBC-datakällor? Del 6

  2. Varför är aggregerade funktioner inte tillåtna i where-satsen

  3. Nya funktioner i SQL Server 2019

  4. Oracle (11.2.0.1):Hur man identifierar raden som för närvarande uppdateras av UPDATE-satsen