2016-12-31 8 views
0

テーブル名usersには列名user_emailが含まれています。 user_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

は、あなたがこのようにそれを使用することができます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 "no function:json_extract"というエラーが表示されます。 –

+0

JSON1拡張機能(https://sqlite.org/loadext.html)を読み込みましたか?ロード可能な拡張機能です。 –

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を解析してそのテーブルに挿入します。 SQLiteので

+0

はいこれは、別のテーブルを作成して保存するオプションです。私はアンドロイドとイオスでsqliteを使用しているので、POstgreSQLのような他のオプションはありません。このために別のテーブルを作成しない方が良いでしょう。 –

+1

@Maulikpatelなぜあなたは別のテーブルを作っていないほうがいいでしょうか? – Schwern

+0

テーブルには約1M行あり、json文字列データは8列に格納されています。 json列用に別の表を作成する場合、合計9個の表があります。その9つのテーブルに加わる必要がある場合、モバイルアプリケーションでsqliteのパフォーマンスが低下する可能性があります。 –