在我的交易 SQL table 的 json 列中获取数组的最后一个元素
GET last element of array in json column of my Transact SQL table
感谢您的帮助。
我的 table CONVERSATIONS 结构如下:
[ ID , JSON_CONTENT ]
在 ID 列中,我在 Varchar 中有一个简单的 ID
在 JSON_CONTENT 栏中,我是这样的:
{
"id_conversation" : "25bc8cbffa8b4223a2ed527e30d927bf",
"exchanges": [
{
"A" : "...",
"B": "..."
},
{
"A" : "...",
"B": "..."
},
{
"A" : "...",
"Z" : "..."
}
]
}
我想查询并获取交易所的id和last元素:
[ ID , LAST_ELT_IN_EXCHANGE_IN_JSON_CONTENT]
我想这样做:
select TOP 3 ID, JSON_QUERY(JSON_CONTENT, '$.exchange[-1]')
from CONVERSATION
当然,Transact SQL 不是 Python。
我看到了这些答案,但我不知道如何应用到我的问题。
感谢帮助<3
如果我没理解错的话,您需要一个额外的 APPLY
运算符以及 OPENJSON()
和 ROW_NUMBER()
的组合。 OPENJSON()
调用的结果是具有列 key
、value
和 type
的 table,当 JSON 内容是一个数组时, key
列returns指定数组中元素的索引:
Table:
SELECT ID, JSON_CONTENT
INTO CONVERSATION
FROM (VALUES
(1, '{"id_conversation":"25bc8cbffa8b4223a2ed527e30d927bf","exchanges":[{"A":"...","B":"..."},{"A":"...","B":"..."},{"A":"...","Z":"..."}]}')
) v (ID, JSON_CONTENT)
声明:
SELECT c.ID, j.[value]
FROM CONVERSATION c
OUTER APPLY (
SELECT [value], ROW_NUMBER() OVER (ORDER BY CONVERT(int, [key]) DESC) AS rn
FROM OPENJSON(c.JSON_CONTENT, '$.exchanges')
) j
WHERE j.rn = 1
结果:
ID value
------------------------
1 {
"A" : "...",
"Z" : "..."
}
注意,-1
不是您的 path
表达式中的有效数组索引,但您可以通过索引访问 JSON 数组中的项目(例如 '$.exchanges[2]'
).
感谢您的帮助。
我的 table CONVERSATIONS 结构如下:
[ ID , JSON_CONTENT ]
在 ID 列中,我在 Varchar 中有一个简单的 ID
在 JSON_CONTENT 栏中,我是这样的:
{
"id_conversation" : "25bc8cbffa8b4223a2ed527e30d927bf",
"exchanges": [
{
"A" : "...",
"B": "..."
},
{
"A" : "...",
"B": "..."
},
{
"A" : "...",
"Z" : "..."
}
]
}
我想查询并获取交易所的id和last元素:
[ ID , LAST_ELT_IN_EXCHANGE_IN_JSON_CONTENT]
我想这样做:
select TOP 3 ID, JSON_QUERY(JSON_CONTENT, '$.exchange[-1]')
from CONVERSATION
当然,Transact SQL 不是 Python。
我看到了这些答案,但我不知道如何应用到我的问题。
感谢帮助<3
如果我没理解错的话,您需要一个额外的 APPLY
运算符以及 OPENJSON()
和 ROW_NUMBER()
的组合。 OPENJSON()
调用的结果是具有列 key
、value
和 type
的 table,当 JSON 内容是一个数组时, key
列returns指定数组中元素的索引:
Table:
SELECT ID, JSON_CONTENT
INTO CONVERSATION
FROM (VALUES
(1, '{"id_conversation":"25bc8cbffa8b4223a2ed527e30d927bf","exchanges":[{"A":"...","B":"..."},{"A":"...","B":"..."},{"A":"...","Z":"..."}]}')
) v (ID, JSON_CONTENT)
声明:
SELECT c.ID, j.[value]
FROM CONVERSATION c
OUTER APPLY (
SELECT [value], ROW_NUMBER() OVER (ORDER BY CONVERT(int, [key]) DESC) AS rn
FROM OPENJSON(c.JSON_CONTENT, '$.exchanges')
) j
WHERE j.rn = 1
结果:
ID value
------------------------
1 {
"A" : "...",
"Z" : "..."
}
注意,-1
不是您的 path
表达式中的有效数组索引,但您可以通过索引访问 JSON 数组中的项目(例如 '$.exchanges[2]'
).