【发布时间】:2017-10-10 22:05:46
【问题描述】:
我有一个 SQL 表 X,它有一个 JSON 列“JsonVal”和一些其他列
Name Id Group JsonVal
----------------------------------------------------------
Name1 2 gg1 {"LogLevel":"2", "InfoLevel":"3"}
Name2 3 gg5 {"LogLevel":"4"}
按照我想要的方式解析并理解 JsonVal 列中的数据后, 我想从表 X 中读取,以便得到如下结果:
Name Id Features
----------------------------------------------------------
Name1 2 {"HasLogLevel":"True", "LogLevel":"2", "HasInfoLevel":"True"}
Name2 3 {"HasLogLevel":"True", "LogLevel":"4", "HasInfoLevel":"False"}
我无法找到将部分列转换为 JSON 的方法。 如果我在这样的查询中使用 FOR JSON:
SELECT Name,Id,
HasLogLevel = CASE WHEN JSON_VALUE(JsonVal,'$."LogLevel"') IS NOT NULL THEN 'True' ELSE 'False' END,
LogLevel = CASE WHEN JSON_VALUE(JsonVal,'$."LogLevel"') IS NULL THEN 'NO-VALUE' ELSE JSON_VALUE(JsonVal,'$."LogLevel"') END,
HasInfoLevel = CASE WHEN JSON_VALUE(JsonVal,'$."InfoLevel"') IS NOT NULL THEN 'True' ELSE 'False' END
FROM X FOR JSON PATH
它将所有列(包括名称、ID)转换为 JSON。但我只希望在结果中将 3 列 HasLogLevel、LogLevel 和 HasInfoLevel 格式化为 JSON
有没有办法在 SQL Server 中以我想要的方式在单个查询中查询和获取结果?
【问题讨论】:
-
你的方案是什么?也许您可以使用 Python 查询 Azure SQL 数据库并从那里生成新的 JSON 字符串。
-
@EstienneGranet 由于限制,我只能使用 T-SQL。您知道通过查询实现此目的的方法吗?
标签: sql sql-server json sql-server-2012 azure-sql-database