2017-03-02 10 views
0

JSON BLOBを含む属性という名前の列があります。このBLOBは、単一の行に単一のキーと複数のキー:値を持つことができます。SQL ServerでJSONキーを置き換える/名前を変更する/変更する

SELECT JSON_MODIFY(attributes, '$."p6i4"', 'City') AS modified 

はここで簡略化されたサンプルデータの3行です:私は私のような何かを書くことができます知っている

{"68c4":["yes"], "c8ew":["0","1"], "p6i4":["London","Frankfurt","Tokyo"]} 
{"472h":["USD"], "c8ew":["-1","9"], "p6i4":["New York"]} 
{"472h":["EUR","JPY"]} 

は、キーのUUIDがあり、私は人間が読めるコンポーネント

でこれらを交換する必要があります

しかし、これによって値が変更されます。私の問題はキーを変更する必要があることです。誰もこれを行う方法を知っていますか?

+0

'JSON_MODIFYは()' SQL Serverの機能であるように私はPostgresのタグを削除しました。 –

+0

ああええ、すみません。私は最初にこのデータをPostgresのjsonbから取得しましたが、おそらくSQL Serverのソリューションとは関係がありません – onji

+0

PostgreSQL側でデータを変更できますか? –

答えて

2

古いキーの値/フラグメントで新しいキーを挿入し、古いキー:値を削除することができます。

このコードは、「p6i4」から値を持つ新しい「都市」キーを追加します:あなたは配列の値を持っているので、JSON_QUERYを使用する必要が

SELECT JSON_MODIFY(attributes, '$.City', JSON_QUERY(attributes, '$.p6i4')) 

注意を。 あなたが別のキーにそれをコピーした後、あなたは古いキーにNULL値を設定する場合、JSON_MODIFYはそれを削除します:

SELECT JSON_MODIFY(
      JSON_MODIFY(attributes, '$.City', JSON_QUERY(attributes, '$.p6i4')), 
     '$.p6i4', NULL) 
+0

これは素晴らしいことです。 – onji