2017-12-09 14 views
0

JSON配列は、MariaDBテーブルに文字列として格納されています。特定のキー値が配列内のどこに存在する場合でも、行を返すようにしたい。MariaDB JSON関数(配列あり)

私はそれが私に...

1 
で望ましい結果を得ました...

set @json='[{"name":"Albert","state":"IL"},{"name":"John","state":"CA"}]' 

は、次のクエリを実行し....

select json_value(@json,'$[0].name')='Albert' 

を以下の試験を行いました

次のクエリでも同じ結果が得られました(最初の要素として '*'が扱われる場合があります)...

select json_value(@json,'$[*].name')='Albert' 

しかし、私は状態で2番目の名前( "ジョン")を提供する場合、私はどんな結果を得ることはありません...

select json_value(@json,'$[*].name')='John' 

結果...

0 

だから私の観察は、配列インデックスを提供するとき、 "json_value"関数は望ましい結果を返すことができるということです。

配列インデックスを指定してキー値を検索しないようにする方法はありますか?

+1

[dbfiddle(http://dbfiddle.uk/?rdbms=mariadb_10.2&fiddle=4620e2cf592fda2a9dd788ec5f98962aを参照し、[JSON_SEARCH](https://mariadb.com/kb/en/library/json_search/)してみてください)。 – wchiquito

答えて

0

@dbfiddleによってコメントされました。私はJSON_SEARCH機能を試してみました。

ここでは、私が望む結果を得ようとしています。

create table label_test(labels VARCHAR(1000)); 

insert into label_test values ('[{"name":"Albert","state":"IL"},{"name":"John","state":"CA"}]'); 

select * from label_test where JSON_SEARCH(labels,'all','John') like '"$[%].name"'; 

結果は期待どおりの行全体です。

[{"name":"Albert","state":"IL"},{"name":"John","state":"CA"}] 
関連する問題