从JSON

时间:2016-09-02 15:28:12

标签: sql json

我正在使用具有自定义报告功能的MDM,该功能允许一些SQL。我想尝试获取SIM卡ICCID号码列表,但它会以带有其他设备信息的JSON字符串返回。

运行:

SELECT DeviceDetails
FROM Device

返回(没有空格,为便于阅读而格式化):

{
    "BadgeNumber": 0,
    "DeviceLocale": "en-US",
    "ICCID": "0000000000000004720",
    "InstalledPoliciesSignedBy": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1690F",
    "AvailableDeviceCapacity": 00000000080,
    "OSSdkVersion": 24,
    "ModemFirmwareVersion": "angler-03.72",
    "DeviceCapacity": 00000000184,
    "Product": "Nexus 6P/angler",
    "WiFiMAC": "02:00:00:00:00:00"
}

我不知道它运行的SQL有什么样的味道。关于如何才能返回ICCID值的任何想法?

编辑:在报告文档中找到了这个:

  

Admin Portal使用仅支持SELECT语句的SQL-92子集。更改数据库值的SQL命令无效(CREATE,ALTER,DELETE,DROP,INSERT,SELECT INTO,TRUNCATE,UPDATE等)。

2 个答案:

答案 0 :(得分:0)

尝试:

<强> MySQL的:

SELECT DeviceDetails->"$.ICCID" as ICCID
FROM Device;

<强>甲骨文:

SELECT DeviceDetails.Device.ICCID from DeviceDetails;

答案 1 :(得分:0)

Microsoft SQL Server:

如果您足够拥有SQL Server 2016,那么您可以使用MS最终放入SQL Server的新功能。

DECLARE @Device TABLE  ( value VARCHAR(4000))

INSERT INTO @Device (value) VALUES (
'{
    "BadgeNumber": 0,
    "DeviceLocale": "en-US",
    "ICCID": "0000000000000004720",
    "InstalledPoliciesSignedBy": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1690F",
    "AvailableDeviceCapacity": 00000000080,
    "OSSdkVersion": 24,
    "ModemFirmwareVersion": "angler-03.72",
    "DeviceCapacity": 00000000184,
    "Product": "Nexus 6P/angler",
    "WiFiMAC": "02:00:00:00:00:00"
}')

SELECT      
    JSON_VALUE(value, '$.ICCID') as ICCID
FROM @Device  

如果不是,您可能想要推出自己的CLR或查看作者在此处创建的内容:https://www.simple-talk.com/sql/t-sql-programming/consuming-json-strings-in-sql-server/