sql - 通过单个函数提取对象和标量值
问题描述
我必须在 SQL 中编写一个查询来提取 JSON 路径的值。现在的问题是路径的最终值可以是 JSON 对象或标量值。但在 SQL Server 中,要获取对象和标量值JSON_QUERY
,JSON_VALUE
应分别使用函数。我的问题是我想编写返回两种类型值的相同查询。有什么方法可以实现吗?
解决方案
您可以使用OPENJSON
函数来获取给定路径的值,$.foo.bar
如下所示:
CREATE TABLE t(
id INT IDENTITY NOT NULL PRIMARY KEY,
json VARCHAR(MAX)
);
INSERT INTO t(json) VALUES
('{ "foo": { "bar": 123 } }'),
('{ "foo": { "bar": "x" } }'),
('{ "foo": { "bar": [1] } }'),
('{ "foo": { "bar": { "baz": 1 } } }');
SELECT *
FROM t
CROSS APPLY OPENJSON(json, '$.foo')
WHERE [key] = 'bar';
结果将包含以下重要列:
key
:$.foo
可以在 WHERE 子句中使用的键名value
: 数据类型 = NVARCHAR(MAX) 的键的值type
:具有 datatype = INT 的值的类型(参见文档)
推荐阅读
- javascript - Vue js动态显示/隐藏div
- pyspark - 多个 pyspark 程序将按什么顺序在 spark 集群上执行
- google-bigquery - bigquery 引导窗口函数有没有办法使用表值作为偏移量?
- r - 使用另一列作为支持向后和向前填充“缺失值”(NA)
- list - 如何检查我是否可以从一组数字中“制作”一个特定的数字?
- r - 在 R 中使用 round_date() 舍入日期
- php - 无法删除或更新父行,即使 SQL 语句首先更改表
- mysql - kafka-connect 到同步数据库的硬删除事件不起作用或出现错误
- python - columnspecs 不匹配,因此使用 pd.read_fwf 和使用 colspecs 读取值错误
- sql - 查找日期列的最大值并为组的所有行显示该值