读取 JSON 字符串并找到最大值作为整数

Reading JSON string and find the max value as integer

我有一个 JSON 字符串如下:

DECLARE @json nvarchar(max)
SET @json = '{"value": [
    {
        "AEDAT": "20211110"
    },
    {
        "AEDAT": "20211110"
    },
    {
        "AEDAT": "20211110"
    },
    {
        "AEDAT": "20211112"
    },
    {
        "AEDAT": "20211112"
    },
    {
        "AEDAT": "20211112"
    }
]}';

现在我想使用 OPENJSON() 在 SQL 服务器中读取这个 JSON 并找到每个 AEDAT 的最大值。为此,我使用以下查询:

SELECT MAX(value)
FROM OPENJSON(@json, '$.value')

上面的查询返回一个键值对如下的行:

{"AEDAT":"20211112"}

我的 objective 是只得到 20211112 作为整数。

如何实现?

如果你想获得最大值作为整数,你需要使用 OPENJSON() 和显式模式( WITH 子句与列定义)。此架构取决于已解析 JSON 的结构(在您的情况下,它是一个 JSON 数组):

SELECT MAX(AEDAT) AS MaxAEDAT
FROM OPENJSON(@json, '$.value') WITH (
   AEDAT int '$.AEDAT'   
)

如果解析的值为日期,您可以尝试不同的语句:

SELECT MAX(TRY_CONVERT(date, AEDAT, 112)) AS MaxAEDAT
FROM OPENJSON(@json, '$.value') WITH (
   AEDAT varchar(8) '$.AEDAT'   
)

OPENJSON 没有显式模式,为您提供值列,在您的示例中,该列将包含一个对象,例如类型 = 5 的 {"AEDAT": "20211110"}。在该对象上使用 JSON_VALUE :

select max(cast(json_value(j.value, '$.AEDAT') as int))
from openjson(@json, '$.value') as j