2015-06-26 61 views
1

我發現了比這更復雜的解決方案,但我不能做這項工作...檢查的價值存在JSON數組內

我一列稱爲數據類型json。該JSON結構如下:

{"actions": ["action1","action2","action3", ..., "actionN"]} 

所以,讓我們說我有3行數據如下:

{"actions": ["work","run"]} 
{"actions": ["run","eat","sleep", 'walk']} 
{"actions": ["eat","run","work"]} 

我想要檢索其中工作包括在行動的行數組。

我試過類似於這裏發佈的內容: Query for element of array in JSON column,但由於數組內的每個元素只是一個json字符串,所以我卡在那裏。

然後,我想是這樣:

SELECT * from table t WHERE 'work' in ... 

但這也未能得到的值作爲一個字符串數組,把它放在那裏。

使用PostgreSql 9.3。

+0

某種方式使用http://dba.stackexchange.com/questions/54283/how-to-turn-json-array-into-postgres-array與UNNEST – Mihai

回答

1

由於您使用的是json類型,它只是一個字符串內部,最簡單的解決方法是:

SELECT * FROM table WHERE strpos(data::text, 'work') > 0; 

它違背了擺在首位使用json的目的,但它是(很可能)在這種簡單的情況下比json解析器更快。

一個JSON的解決辦法是:

SELECT * FROM (
    SELECT *, unnest(data->"actions")::text AS action FROM table) AS foo 
WHERE action = 'work'; 
+0

謝謝!我認爲有一個更簡單的解決方案,這絕對有效。 – MerLito