我正在使用具有自定义报告功能的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等)。
答案 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/