2016-06-15 9 views
0

Mein Tisch hat eine jsonb Spalte, die JSON-Arrays von Strings in diesem Format gespeichert werden:PSQL: Count Anzahl der Wildcard-Werte in JSONB Array

["ItemA", "ItemB", "ItemC"] 

Ich versuche, die zum Filtern von Zeilen basierend auf der Anzahl bestimmten Elemente im Array mit einem Platzhalter für einen Teil des Elementnamens.

Von dem, was ich hier auf SO gelesen habe, könnte ich die jsonb_to_recordset-Funktion verwenden und dann nur die Daten normal abfragen, aber ich kann die Teile nicht zusammenfügen.

Wie verwende ich die jsonb_to_recordset, um dies zu erreichen? Es wird nach einer Spaltendefinitionsliste gefragt, aber wie gebe ich eine für nur ein String-Array an?

Meine hypothetische (aber natürlich gilt nicht) Abfrage würde wie folgt aussehen:

SELECT * FROM mytable, jsonb_to_recordset(mytable.jsonbdata) AS text[] WHERE mytable.jsonbdata LIKE 'Item%' 

EDIT: Vielleicht könnte es so etwas getan werden anstelle:

SELECT * FROM mytable WHERE jsonbdata ? 'Item%'; 

Antwort

1

Verwenden Sie jsonb_array_elements():

select * 
from 
    mytable t, 
    jsonb_array_elements_text(jsonbdata) arr(elem) 
where elem like 'Item%'; 

      jsonbdata   | elem 
-----------------------------+------- 
["ItemA", "ItemB", "ItemC"] | ItemA 
["ItemA", "ItemB", "ItemC"] | ItemB 
["ItemA", "ItemB", "ItemC"] | ItemC 
(3 rows) 

Wahrscheinlich möchten Sie nur bestimmte Tabellenzeilen auswählen:

select distinct t.* 
from 
    mytable t, 
    jsonb_array_elements_text(jsonbdata) arr(elem) 
where elem like 'Item%'; 
+0

Vielen Dank! Zur Vervollständigung: Um die Zählung zu bekommen, gruppiere ich mich nur nach der einzigartigen Spalte, die ich habe. – fgblomqvist

Verwandte Themen