2016-12-02 23 views
12

Mam następujące funkcję w PostgreSQLUsuń cudzysłów ze zwrotu funkcji w PostgreSQL

CREATE OR REPLACE FUNCTION public.translatejson(JSONB, TEXT) 
RETURNS TEXT 
AS 
$BODY$ 
    SELECT ($1->$2)::TEXT 
$BODY$ 
LANGUAGE sql STABLE; 

Kiedy wykonać go otrzymam wartości otoczonych podwójnym cudzysłowem. Na przykład:

SELECT id, translatejson("title", 'en-US') AS "tname" FROM types."FuelTypes";

w zamian dostaję stolik jak ten

------------------- 
| id | tname  | 
------------------- 
| 1 | "gasoline" | 
| 2 | "diesel" | 
------------------- 

Wartości w 'tytułowej' kolumny są w formacie JSON: { "en-US": "benzyna "," fr-FR ":" esencja "}. Jak mogę pominąć podwójne cudzysłowy, aby zwrócić tylko ciąg wyniku?

Odpowiedz

28

Operator -> zwraca wynik json. Przesłanie go do text pozostawia w json reprsentation.

Operator ->> zwraca wynik text. Użyj zamiast tego.

test=> SELECT '{"car": "going"}'::jsonb -> 'car'; 
?column? 
---------- 
"going" 
(1 row) 

test=> SELECT '{"car": "going"}'::jsonb ->> 'car'; 
?column? 
---------- 
going 
(1 row) 
+1

Doskonała odpowiedź! –

+0

zapisałeś dzień. – 0zero0zero