2016-08-15 1 views
0

Ich habe eine Tabelle letter_count wie folgt aussehen:SQL - Filterreihen, wenn die Anordnung eine bestimmte Elemente enthält

count letters 
2 ["a","b"] 
4 ["b","c"] 
2 ["a"] 
0 ["b"] 
6 ["c"] 
7 ["d"] 

Ich mag würde der Lage sein, nur die Zeilen Abfrage eine bestimmte Buchstaben enthalten.

Ich habe versucht:

SELECT * FROM letter_counter WHERE letters IN ('["a"]') 

Aber es funktioniert nicht.

Was ist die richtige Syntax dafür?

+2

serialisierten Daten in einer Datenbankspalte ist eine sehr schlechte Idee, zumindest teilweise für das sehr Problem, das Sie jetzt sind zu stoßen. Wenn Sie die Kontrolle über das Datenbankschema haben, sollten Sie es umgestalten, um eine abhängige Tabelle für die Buchstaben zu verwenden. – GordonM

Antwort

1

versuchen, diese wählen:

SELECT * FROM letter_counter 
WHERE(case when position('a' in array_to_string(letters,',')) > 0 then true else false end) 
0

verwenden:

SELECT * FROM letter_counter WHERE letters @> ARRAY['a']::varchar[] 

Oder Sie 5 Sekunden die Suche Stack-Überlauf verbringen konnte und nur this answer verwenden.

Verwandte Themen