首頁 資料庫 mysql教程 如何在SQL Server中重新命名JSON金鑰(T-SQL)?

如何在SQL Server中重新命名JSON金鑰(T-SQL)?

Apr 03, 2019 pm 01:52 PM
json sql

如果你一直使用JSON_MODIFY()函數來修改SQL Server中的JSON文檔,那麼你可能習慣於修改key/value屬性的value部分。但是你知道你也可以修改key部分嗎?

如何在SQL Server中重新命名JSON金鑰(T-SQL)?

#這樣做的訣竅是將value複製到一個新鍵,然後刪除舊鍵。

這裡有一個基本的例子來說明我的意思。

-- Declare a variable and assign some JSON to it
DECLARE @data NVARCHAR(50)='{"Name":"Homer"}'

-- Print the current JSON
PRINT @data

-- Rename the key (by copying the value to a new key, then deleting the old one)
SET @data=
 JSON_MODIFY(
  JSON_MODIFY(@data,'$.Handle', JSON_VALUE(@data,'$.Name')),
  '$.Name',
  NULL
 )
-- Print the new JSON
PRINT @data
登入後複製

結果:

{"Name":"Homer"}
{"Handle":"Homer"}
登入後複製

這將列印出原始的鍵/值對,然後是新的鍵/值對。

雖然我們可以說我們「重新命名」了密鑰,但實際上我們只是創建了一個新密鑰,將現有值複製到該新密鑰,然後將舊密鑰設為NULL來刪除它。

在本例中,我們使用JSON_VALUE()函數來擷取值。

數值

在將資料複製到新鍵時需要小心。預設情況下,SQL Server將它括在雙引號中。這可能是你想要的,也可能不是。

但是,如果你複製一個數值,你可能希望它仍然是一個數值(即沒有雙引號)。在本例中,需要使用CAST()函數將其轉換為數值資料類型。這裡有一個例子:

-- Declare a variable and assign some JSON to it
DECLARE @data NVARCHAR(50)='{"Residents":768}'

-- Print the current JSON
PRINT @data

-- Rename the key (by copying the value to a new key, then deleting the old one)
SET @data=
 JSON_MODIFY(
  JSON_MODIFY(@data,'$.Population', CAST(JSON_VALUE(@data,'$.Residents') AS int)),
  '$.Residents',
  NULL
 )
-- Print the new JSON
PRINT @data
登入後複製

結果:

{"Residents":768}
{"Population":768}
登入後複製

所以結果是一個數字。

如果我們從這個範例中刪除CAST()函數,我們得到的結果是:

-- Declare a variable and assign some JSON to it
DECLARE @data NVARCHAR(50)='{"Residents": 768}'

-- Print the current JSON
PRINT @data

-- Rename the key (by copying the value to a new key, then deleting the old one)
SET @data=
 JSON_MODIFY(
  JSON_MODIFY(@data,'$.Population', JSON_VALUE(@data,'$.Residents')),
  '$.Residents',
  NULL
 )
-- Print the new JSON
PRINT @data
登入後複製

結果:

{"Residents": 768}
{"Population":"768"}
登入後複製

因此,在本例中,我們不僅重命名了鍵,還將(JSON)資料類型從數字更改為字串。

注意,JSON不區分不同的數字型別。它只有一個數字類型:number。

key鍵和空格

在本例中,我將一個現有鍵重新命名為一個包含空格的新鍵(它由兩個單字組成,用空格分隔)。

因為新鍵包含空格,所以我需要用雙引號括住鍵。如果不這樣做,就會出現錯誤。

-- Declare a variable and assign some JSON to it
DECLARE @data NVARCHAR(50)='{"Population":68}'

-- Print the current JSON
PRINT @data

-- Rename the key (by copying the value to a new key, then deleting the old one)
SET @data=
 JSON_MODIFY(
  JSON_MODIFY(@data,'$."Average IQ"', CAST(JSON_VALUE(@data,'$.Population') AS int)),
  '$.Population',
  NULL
 )
-- Print the new JSON
PRINT @data
登入後複製

結果:

{"Population":68}
{"Average IQ":68}
登入後複製

巢狀的屬性

如果屬性是巢狀的,則沒有問題。只需使用點符號來引用它。

DECLARE @data NVARCHAR(4000)
SET @data=N'{  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Hobbies": ["Eating", "Sleeping", "Base Jumping"]  
    }
 }'
PRINT @data
SET @data=
  JSON_MODIFY(
    JSON_MODIFY(@data,'$.Suspect.Qualifications', JSON_QUERY(@data,'$.Suspect.Hobbies')),
   '$.Suspect.Hobbies',
   NULL
  )
PRINT @data
登入後複製

結果:

{ 
"Suspect": { 
"Name": "Homer Simpson", 
"Hobbies": ["Eating", "Sleeping", "Base Jumping"] 
}
}
{ 
"Suspect": { 
"Name": "Homer Simpson" 
,"Qualifications":["Eating", "Sleeping", "Base Jumping"]}
}
登入後複製

你可能也注意到,這個範例使用JSON_QUERY()函數來提取值,而不是像前面的範例那樣使用JSON_VALUE()

這是因為在本例中,我們正在提取一個數組,而JSON_VALUE()不能提取整個數組(它只能從數組中提取標量值)。另一方面,JSON_QUERY()函數提取物件和數組,但不提取標量值。

相關推薦:《SQL教學》《MySQL教學

以上是如何在SQL Server中重新命名JSON金鑰(T-SQL)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1657
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1230
24
Hibernate 框架中 HQL 和 SQL 的差異是什麼? Hibernate 框架中 HQL 和 SQL 的差異是什麼? Apr 17, 2024 pm 02:57 PM

HQL和SQL在Hibernate框架中進行比較:HQL(1.物件導向語法,2.資料庫無關的查詢,3.類型安全),而SQL直接操作資料庫(1.與資料庫無關的標準,2.可執行複雜查詢和資料操作)。

Oracle與DB2的SQL語法比較與區別 Oracle與DB2的SQL語法比較與區別 Mar 11, 2024 pm 12:09 PM

Oracle和DB2是兩個常用的關聯式資料庫管理系統,它們都有自己獨特的SQL語法和特性。本文將針對Oracle和DB2的SQL語法進行比較與區別,並提供具體的程式碼範例。資料庫連接在Oracle中,使用以下語句連接資料庫:CONNECTusername/password@database而在DB2中,連接資料庫的語句如下:CONNECTTOdataba

Oracle SQL中除法運算的用法 Oracle SQL中除法運算的用法 Mar 10, 2024 pm 03:06 PM

《OracleSQL中除法運算的用法》在OracleSQL中,除法運算是常見的數學運算之一。在資料查詢和處理過程中,除法運算可以幫助我們計算欄位之間的比例或得出特定數值的邏輯關係。本文將介紹OracleSQL中除法運算的用法,並提供具體的程式碼範例。一、OracleSQL中除法運算的兩種方式在OracleSQL中,除法運算可以用兩種不同的方式來進行

PHP 數組轉 JSON 的效能最佳化技巧 PHP 數組轉 JSON 的效能最佳化技巧 May 04, 2024 pm 06:15 PM

PHP數組轉JSON的效能最佳化方法包括:使用JSON擴充和json_encode()函數;新增JSON_UNESCAPED_UNICODE選項以避免字元轉義;使用緩衝區提高循環編碼效能;快取JSON編碼結果;考慮使用第三方JSON編碼庫。

資料庫技術大比拼:Oracle和SQL的差別有哪些? 資料庫技術大比拼:Oracle和SQL的差別有哪些? Mar 09, 2024 am 08:30 AM

資料庫技術大比拼:Oracle和SQL的差別有哪些?在資料庫領域中,Oracle和SQLServer是兩種備受推崇的關聯式資料庫管理系統。儘管它們都屬於關係型資料庫的範疇,但兩者之間存在著許多不同之處。在本文中,我們將深入探討Oracle和SQLServer之間的區別,以及它們在實際應用中的特徵和優勢。首先,Oracle和SQLServer在語法方面存

Jackson庫中註解如何控制JSON序列化和反序列化? Jackson庫中註解如何控制JSON序列化和反序列化? May 06, 2024 pm 10:09 PM

Jackson庫中的註解可控制JSON序列化和反序列化:序列化:@JsonIgnore:忽略屬性@JsonProperty:指定名稱@JsonGetter:使用獲取方法@JsonSetter:使用設定方法反序列化:@JsonIgnoreProperties:忽略屬性@ JsonProperty:指定名稱@JsonCreator:使用建構子@JsonDeserialize:自訂邏輯

MySQL連線數對資料庫效能的影響分析 MySQL連線數對資料庫效能的影響分析 Mar 16, 2024 am 10:09 AM

MySQL連線數對資料庫效能的影響分析隨著網路應用的不斷發展,資料庫成為了支援應用系統重要的資料儲存和管理工具。在資料庫系統中,連線數是一個重要的概念,它直接關係到資料庫系統的效能和穩定性。本文將從MySQL資料庫的角度出發,探討連線數對資料庫效能的影響,並透過具體的程式碼範例進行分析。一、連線數是什麼?連線數指的是資料庫系統同時支援的客戶端連線數,也可以理

Oracle與SQL的差異與應用場景解析 Oracle與SQL的差異與應用場景解析 Mar 08, 2024 pm 09:39 PM

Oracle与SQL的区别及应用场景解析在数据库领域,Oracle和SQL是两个常被提及的术语。Oracle是一种关系型数据库管理系统(RDBMS),而SQL(StructuredQueryLanguage)是一种用于管理关系数据库的标准化语言。虽然它们有一定的关联性,但也存在一些显著的区别。首先,从定义上来说,Oracle是一种具体的数据库管理系统,由

See all articles