2016-12-31 42 views
0

我有表名users包含列名user_emailuser_email列具有如下所示的json格式的數據。Sqllite:從json字符串搜索值

[ 
    { 
    "card_email_id": "98", 
    "card_id": "88", 
    "email": "[email protected]", 
    "type": "Home" 
    }, 
    { 
    "card_email_id": "99", 
    "card_id": "88", 
    "email": "[email protected]", 
    "type": "Home" 
    } 
] 

我想查詢只email值從JSON字符串搜索值。

我已經嘗試過REGEXP,但在sqlite中不支持。

這是可能的使用LIKE運算符或其他東西?

回答

3

SQLite中有一個JSON1 extension,你可以使用它像這樣:

SELECT * 
FROM users, json_each(user_email) 
WHERE 
    json_extract(json_each.value, '$.email') LIKE '%criteria%'; 

而且related question about LIKE - HTH)。

+1

這通常在Android上尚未提供......但問題並未要求提供。 :) –

+0

@ shA.t當我運行該查詢時,它給出的錯誤,「無功能:json_extract」 –

+0

你是否[加載](https://sqlite.org/loadext.html)JSON1擴展?這是一個可載入的擴展;)。 –

1

除非數據庫支持JSON類型,否則JSON只是一個字符串。您需要將數據作爲適當的表和列插入,或使用帶有JSON type like PostgreSQL的SQL數據庫。

在SQLite中,您可以將這些數據轉換爲卡片電子郵件的新表格(我假設存在)。

create table card_email (
    id integer primary key auto_increment, 
    card_id integer references cards(id), 
    email text not null, 
    type text not null 
); 

然後解析並插入到該表中的JSON。

+0

是的,這是創建另一個表並保存它的選項。我在android和ios中使用sqlite,所以沒有其他選項像POstgreSQL。如果不爲這個創建另一個表格會更好。 –

+1

@Maulikpatel你爲什麼說不做另一張桌子會更好? – Schwern

+0

我們在表中有大約1M行,而8列存儲json字符串數據。如果我們要爲json列創建單獨的表,那麼將共有9個表。如果我們必須加入這9個可能會降低移動應用程序中sqlite性能的表格。 –