SQL Server:是否可以在GROUP_BY中使用JSON_VALUE?

问题描述

我尝试在JSON_VALUE子句中使用GROUP_BY并收到此错误

JSON文本格式不正确。在位置0处发现意外字符'b'。

仅在SELECT中使用它时,会得到预期的结果。

SELECT 
    COUNT(*),Date,JSON_VALUE(msg,'$.a')
FROM
    requests
GROUP BY 
    Date,'$.a')

解决方法

似乎在msg列中存储了无效的JSON。但是您可以尝试更改您的声明。

表格:

CREATE TABLE requests (
   [Date] date,[Msg] nvarchar(1000)
)
INSERT INTO requests ([Date],[Msg])
VALUES
   ('20201020',N'{"m":"GET","a":"/Login.aspx"}'),('20201020',('20201021',N'{b:"GET","a":"/Login.aspx"} ')

声明:

SELECT 
   COUNT(*) AS [Count],[Date],CASE WHEN ISJSON([Msg]) = 1 THEN JSON_VALUE([Msg],'$.a') END AS Msg
FROM requests
GROUP BY [Date],'$.a') END

结果:

Count   Date        Msg
1       2020-10-21  
3       2020-10-20  /Login.aspx
1       2020-10-21  /Login.aspx

作为补充说明,如果要获取包含无效JSON内容的行,请执行以下语句:

SELECT * 
FROM request 
WHERE ISJSON([Msg]) = 0