如何從employment_types( type, salary) 和skills( name, level) 陣列中檢索值并在列中顯示它們?我試過了employment_types,它不起作用更不用說skills:
declare @json nvarchar(max)
set @json = '[
{
"title": "IT Admin",
"experience_level": "mid",
"employment_types": [
{
"type": "permanent",
"salary": null
}
],
"skills": [
{
"name": "Security",
"level": 3
},
{
"name": "WIFI",
"level": 3
},
{
"name": "switching",
"level": 3
}
]
},
{
"title": "Lead QA Engineer",
"experience_level": "mid",
"employment_types": [
{
"type": "permanent",
"salary": {
"from": 7000,
"to": 13000,
"currency": "pln"
}
}
],
"skills": [
{
"name": "Embedded C",
"level": 4
},
{
"name": "Quality Assurance",
"level": 4
},
{
"name": "C ",
"level": 4
}
]
}
]';
SELECT *
FROM OPENJSON(@JSON, '$.employment_types')
WITH
(
type nvarchar(50) '$.type',
salary varchar(max) '$.salary'
)
有將近 7000 條記錄,我想從所有這些記錄中顯示上述列。
uj5u.com熱心網友回復:
很難確切地知道您想要什么,因為employment_types和skills都是陣列。但假設employment_types總是只有一個元素,你可以做這樣的事情
SELECT
j1.title,
j1.experience_level,
j1.employment_type,
salary = j1.salary_currency ' ' CONCAT(j1.salary_from, ' - ', j1.salary_to),
j2.name,
j2.level
FROM OPENJSON(@JSON)
WITH (
title nvarchar(100),
experience_level nvarchar(10),
employment_type nvarchar(50) '$.employment_types[0].type',
salary_from int '$.employment_types[0].salary.from',
salary_to int '$.employment_types[0].salary.to',
salary_currency char(3) '$.employment_types[0].salary.currency',
skills nvarchar(max) AS JSON
) j1
CROSS APPLY OPENJSON(j1.skills)
WITH
(
name nvarchar(50),
level int
) j2
資料庫<>小提琴
- 由于我們直接從根物件中提取資料,因此我們不需要 JSON 路徑引數。
OPENJSON將自動將陣列分解為單獨的行。如果您只是想要employment_types,您可以使用路徑引數直接轉到那個。 employment_types[0]表示只獲取陣列的第一個元素。如果你想要所有的元素,你將需要另一個OPENJSON- 注意
AS JSONfor的使用skills,這意味著整個 JSON 陣列被拉出,然后可以通過另一個呼叫推送到OPENJSON
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/314428.html
標籤:json sql-server 查询语句 解析 打开-json
上一篇:SoX統計選項的選擇性輸出?
