Yon*_*Kim 4 sql sql-server json azure
我正在尝试查询一个大小写混合的 JSON 列。例如,某些行的键都是小写的,如下所示:
{"name":"Screening 1","type":"template","pages":[{"pageNumber":1,...}
Run Code Online (Sandbox Code Playgroud)
但是,某些行的首字母大写,如下所示:
{"Type":"template","Name":"Screening2","Pages":[{"PageNumber":1,...}
Run Code Online (Sandbox Code Playgroud)
不幸的是,SQL Server 似乎只支持区分大小写的 JSON 路径系统。因此,我无法成功查询所有行。如果我在如下查询中使用像“$.pages”这样的小写路径:
SELECT ST.Id AS Screening_Tool_Id
, ST.Name AS Screening_Tool_Name
, ST.Description AS Screening_Tool_Description
, COUNT(JSON_VALUE (SRQuestions.value, '$.id')) AS Question_Specific_Id
FROM dbo.ScreeningTemplate AS ST
CROSS APPLY OPENJSON(ST.Workflow, '$.pages') AS SRPages
CROSS APPLY OPENJSON(SRPages.Value, '$.sections') AS SRSections
Run Code Online (Sandbox Code Playgroud)
我想念任何有大写键的行。有没有办法查询所有行而忽略它们的大小写?
小智 5
根据 MS 的说法,看起来您陷入了区分大小写的查询:
当 OPENJSON 解析 JSON 数组时,该函数返回 JSON 文本中元素的索引作为键。+ 用于将路径步骤与 JSON 表达式的属性进行匹配的比较是 区分大小写和排序规则的(即, BIN2比较)。 https://learn.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql
如果唯一的变化在于第一个字符的大小写,您可以尝试通过使用变体和UNION结果一起创建查询来解决此限制。
也许你可以降低json:
COUNT(JSON_VALUE (lower(SRQuestions.value), '$.id')) AS Question_Specific_Id
Run Code Online (Sandbox Code Playgroud)