鑒于下面的 JSON 資料和包含資料的表,我如何查詢值并寫入行和列拆分的新表?
包含 JSON 的基本表:
CREATE TABLE BI.DataTable
(
JsonDataText VARCHAR(MAX)
);
JSON資料:
{
"datatable": {
"data": [
[
"ZSFH",
"99999",
"2022-08-31",
571106
],
[
"ZSFH",
"99999",
"2022-07-31",
578530
],
[
"ZSFH",
"99999",
"2022-06-30",
582233
],
[
"ZSFH",
"99999",
"2022-05-31",
581718
]
]
}
}
當我使用 JSON_VALUE 函式時,每列都得到一個空值。
SELECT
JSON_VALUE (JsonDataText, '$.data[0]') AS MetricCode,
JSON_VALUE (JsonDataText, '$.data[1]') AS RegionID,
JSON_VALUE (JsonDataText, '$.data[2]') AS ReportingPeriod,
JSON_VALUE (JsonDataText, '$.data[3]') AS MetricValue
FROM BI.DataTable
WHERE ISJSON(JsonDataText) > 0
uj5u.com熱心網友回復:
使用OPENJSON()適當的列定義和附加APPLY運算子是一種可能的方法:
SELECT j.*
FROM DataTable d
OUTER APPLY OPENJSON(d.JsonDataText, '$.datatable.data') WITH (
MetricCode varchar(4) '$[0]',
RegionID varchar(5) '$[1]',
ReportingPeriod varchar(10) '$[2]',
MetricValue int '$[3]'
) j
WHERE ISJSON(d.JsonDataText) = 1
結果:
| 公制代碼 | 區域ID | 報告期 | 度量值 |
|---|---|---|---|
| ZSFH | 99999 | 2022-08-31 | 571106 |
| ZSFH | 99999 | 2022-07-31 | 578530 |
| ZSFH | 99999 | 2022-06-30 | 582233 |
| ZSFH | 99999 | 2022-05-31 | 581718 |
NULL請注意,當前陳述句回傳值的原因是:
JSON_VALUE()從 JSON 字串中提取標量值,但$.datatable.data存盤的部分 JSON 是 JSON 陣列,其中 JSON 陣列作為項,因此在這種情況下您需要使用JSON_QUERY().$.data[0]路徑運算式錯誤。
以下示例(使用正確的路徑)從JSON 陣列JSON_QUERY()中提取專案:$.datatable.data
SELECT
JSON_QUERY(JsonDataText, '$.datatable.data[0]') AS MetricCode,
JSON_QUERY(JsonDataText, '$.datatable.data[1]') AS RegionID,
JSON_QUERY(JsonDataText, '$.datatable.data[2]') AS ReportingPeriod,
JSON_QUERY(JsonDataText, '$.datatable.data[3]') AS MetricValue
FROM DataTable
WHERE ISJSON(JsonDataText) > 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/512213.html
上一篇:決議具有不確定欄位數的文本
