问题描述
我尝试在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