读取 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
我有一个 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