【问题标题】:Parsing JSON with T-SQL使用 T-SQL 解析 JSON
【发布时间】:2019-08-08 07:48:53
【问题描述】:

我希望只选择 JSON 字符串中的每个值名称和值,并转入 SQL 中的单独列,以便我可以轻松地将它们传递到 powershell 字符串以发送到外部 API

DECLARE @json NVARCHAR(MAX)

SET @json='{  "InsertRecordData": {  "data": {  "AdditionalData": {  "DataObjects": {  "ObjData": {  "Name": "coll_exclude",  "Fields": {  "FieldData1": {  "Name": "agreement",  "Value": "1234"  },  "FieldData2": {  "Name": "system",  "Value": "live"  },  "FieldData3": {  "Name": "date_added",  "Value": "2019-08-01"  },  "FieldData4": {  "Name": "time_added",  "Value": "11:20"  }  }  }  }  }  }  }  }';

SELECT *
FROM OPENJSON(@json,'$.InsertRecordData.data.AdditionalData.DataObjects.ObjData.Fields')

所以我想看看

Agreement   System    Date_added   time_added

1234           live      2019-08-01   11:20

【问题讨论】:

    标签: json sql-server tsql pivot open-json


    【解决方案1】:

    使用 mssql pivot()

    DECLARE @json NVARCHAR(MAX)
    
    SET @json='{  "InsertRecordData": {  "data": {  "AdditionalData": {  "DataObjects": {  "ObjData": {  "Name": "coll_exclude",  "Fields": {  "FieldData1": {  "Name": "agreement",  "Value": "1234"  },  "FieldData2": {  "Name": "system",  "Value": "live"  },  "FieldData3": {  "Name": "date_added",  "Value": "2019-08-01"  },  "FieldData4": {  "Name": "time_added",  "Value": "11:20"  }  }  }  }  }  }  }  }';
    
    
    select [agreement], [system], [date_added], [time_added] from
    (
        SELECT json_value(js.value, '$.Name') as Titles, json_value(js.value, '$.Value') as val
        FROM OPENJSON(@json,'$.InsertRecordData.data.AdditionalData.DataObjects.ObjData.Fields') as js) as SourceTb
    PIVOT
    (
        max(val)
        FOR Titles in ([agreement], [system], [date_added], [time_added])
    ) as PivotTable
    

    【讨论】:

    • 太好了.. 谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 2017-12-02
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多