SQL Server中json数组中的按值排序
我的表名为SQL Server中json数组中的按值排序,sql,json,sql-server,Sql,Json,Sql Server,我的表名为foo,如下所示: create table foo ( Id Int, Description Nvarchar(Max) ) 我在Description中的数组中有json,如下所示: [ { "name":"a", "date":"2021-03-01" }, { "name":"b",
foo
,如下所示:
create table foo
(
Id Int,
Description Nvarchar(Max)
)
我在Description
中的数组中有json,如下所示:
[
{
"name":"a",
"date":"2021-03-01"
},
{
"name":"b",
"date":"2021-03-02"
}
]
select *
from foo
order by json_value(Description, '$.date')
我希望在json列表中按最大日期对foo表进行排序,如下所示:
[
{
"name":"a",
"date":"2021-03-01"
},
{
"name":"b",
"date":"2021-03-02"
}
]
select *
from foo
order by json_value(Description, '$.date')
但这个查询不起作用
如何解决此问题?一种可能的方法是使用
OPENJSON()
解析存储的JSON,并找到最大日期:
表:
CREATE TABLE foo (
Id Int,
Description Nvarchar(Max)
)
INSERT INTO foo (Id, Description)
VALUES
(1, N'[{"name":"a","date":"2021-03-01"},{"name":"b","date":"2021-03-02"}]'),
(2, N'[{"name":"a","date":"2021-03-11"},{"name":"b","date":"2021-03-12"}]')
声明:
SELECT Id, Description
FROM (
SELECT *
FROM foo f
OUTER APPLY (
SELECT MAX([date]) AS [Date]
FROM OPENJSON(f.Description) WITH ([date] nvarchar(10) '$.date')
) j
) t
ORDER BY TRY_CONVERT(date, [Date], 23)
结果:
Id Description
1 [{"name":"a","date":"2021-03-01"},{"name":"b","date":"2021-03-02"}]
2 [{"name":"a","date":"2021-03-11"},{"name":"b","date":"2021-03-12"}]
一种可能的方法是使用
OPENJSON()
解析存储的JSON并查找最大日期:
表:
CREATE TABLE foo (
Id Int,
Description Nvarchar(Max)
)
INSERT INTO foo (Id, Description)
VALUES
(1, N'[{"name":"a","date":"2021-03-01"},{"name":"b","date":"2021-03-02"}]'),
(2, N'[{"name":"a","date":"2021-03-11"},{"name":"b","date":"2021-03-12"}]')
声明:
SELECT Id, Description
FROM (
SELECT *
FROM foo f
OUTER APPLY (
SELECT MAX([date]) AS [Date]
FROM OPENJSON(f.Description) WITH ([date] nvarchar(10) '$.date')
) j
) t
ORDER BY TRY_CONVERT(date, [Date], 23)
结果:
Id Description
1 [{"name":"a","date":"2021-03-01"},{"name":"b","date":"2021-03-02"}]
2 [{"name":"a","date":"2021-03-11"},{"name":"b","date":"2021-03-12"}]
你说“不行”是什么意思?您给出的示例数据看起来像一个带有JSON blob的单行。单行应如何排序?请编辑您的问题以显示您期望的输出。Tank回答,您完全正确,如果我在json中有一个对象,则此查询有效,但我在json中有一个对象数组,我需要一个查询来查找json列表中每行中的最大日期,并且我的总输出按最大日期排序。您所说的“不起作用”是什么意思? 您给出的示例数据看起来像一个带有JSON blob的单行。单行应如何排序?请编辑您的问题以显示您所期望的输出。Tank For answer,您完全正确,如果我有json中的一个对象,这个查询可以工作,但我在json中有一个对象数组,我需要一个查询来查找json列表中每行中的最大日期,并且我的总输出按最大日期排序。