2017-03-02 58 views
0

我有一個名爲屬性的列,其中包含一個JSON blob。該blob可以在單個行中具有單個和多個鍵:值。替換/重命名/修改SQL Server中的JSON密鑰

下面是簡化樣本數據的3行:

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

關鍵的是UUID的,我需要與人可讀組件

我知道我可以寫類似更換這些:

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

但是這改變了價值。我的問題是我需要改變關鍵。有誰知道如何做到這一點?

+0

我刪除了Postgres的標籤爲'JSON_MODIFY()'是一個SQL Server功能。 –

+0

ahh對不起。由於這些數據來自Postgres jsonb,所以我將它留在那裏,但可能與解決方案中的SQL Server不太相關。 – onji

+0

您可以在PostgreSQL端修改數據嗎? –

回答

2

您可以使用舊密鑰的值/片段插入新密鑰並刪除舊密鑰:值。

此代碼將增加新的「城市」鍵與「p6i4」的值:

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

請注意,你需要使用JSON_QUERY因爲你有數組值。 如果設置在舊鑰匙你在另一個密鑰複製後,NULL值,JSON_MODIFY將其刪除:

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

這很好用,謝謝關於將值設置爲NULL以刪除一個鍵的提示! – onji