SQL Server 2016 OPENJSON忽略大小写

Posted YanJinrong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server 2016 OPENJSON忽略大小写相关的知识,希望对你有一定的参考价值。

使用WITH子句OPENJSON将输入JSON表达式中的键与该WITH子句中的列名进行匹配,是区分大小写,可以使用条件聚合以忽略大小写:

DECLARE @JSON varchar(max) = '[
   "dDate":"2022-05-01","cVouchID":"SS-220500001", 
   "ddate":"2022-05-04","cvouchid":"SS-220500002"
]'

--使用WITH子句:
Select JsonTable.*
  From OPENJSON(@JSON, '$')
  with(
     dDate datetime '$.dDate'
    ,cVouchID varchar(max) '$.cVouchID'
  ) as JsonTable;

--使用条件聚合以忽略大小写:
SELECT 
   MAX(CASE WHEN LOWER(j2.[key]) = 'ddate' THEN j2.[value] END) AS dDate,
   MAX(CASE WHEN LOWER(j2.[key]) = 'cvouchid' THEN j2.[value] END) AS cVouchID
FROM OPENJSON(@JSON, '$') j1 CROSS APPLY OPENJSON(j1.[value]) j2
GROUP BY j1.[key]

第一次输出第二行记录因为字段名是小写的,没有匹配到,结果为NULL):
dDate    cVouchID
2022-05-01 00:00:00.000    SS-220500001
NULL    NULL

第二次使用聚合条件,能输出正确结果:
dDate    cVouchID
2022-05-01    SS-220500001
2022-05-04    SS-220500002

以上方法虽然能得出正确的结果,不过用起来太麻烦,还是考虑在生成JSON表达式及解析表达式时,直接将字段名统一转成大写或小写最省事,一了百了。

以上是关于SQL Server 2016 OPENJSON忽略大小写的主要内容,如果未能解决你的问题,请参考以下文章

OPENJSON 在 SQL Server 中不起作用?

使用 C# 和 OPENJSON 将 JSON 插入 SQL Server 2016

SQL Server 2016 中存储过程中的 OPENJSON 语法

SQL Server 2016 OPENJSON忽略大小写

使用 Sql Server 2016 的 OPENJSON 函数从 Json 文档中的多个数组元素中选择结果

SQL Server OPENJSON 读取嵌套的 json