【问题标题】:Reading JSON string and find the max value as integer读取 JSON 字符串并找到最大值为整数
【发布时间】:2021-12-26 11:41:14
【问题描述】:

我有一个 JSON 字符串如下:

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

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

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

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

{"AEDAT":"20211112"}

我的目标是仅将 20211112 设为整数。

如何做到这一点?

【问题讨论】:

    标签: sql json sql-server tsql open-json


    【解决方案1】:

    如果您想获取整数形式的最大值,您需要使用带有显式架构的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'   
    )
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-17
        • 2021-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-06
        • 1970-01-01
        相关资源
        最近更新 更多