Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server中json数组中的按值排序_Sql_Json_Sql Server - Fatal编程技术网

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列表中每行中的最大日期,并且我的总输出按最大日期排序。