You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2012中不使用OPENJSON查询Education[Level]='SMA'的方法

问题描述

现有JSON数据示例:

[
    {
        "Level"       : "S1",
        "Major"       : "Teknik Informatika"
    },
    {
        "Level"       : "SMA",
        "Major"       : "IPA"
    },
    {
        "Level"       : "SMP",
        "Major"       : "Umum"
    },
    {
        "Level"       : "SD",
        "Major"       : "Umum"
  }
]

以及包含JSON格式Education字段的SQL Server表数据:

IDUserIDEducation
1B000-1[{"Level":"S1","Major":"TI"},{"Level":"SMA","Major":"IPA"}]
2B000-2[{"Level":"SMA","Major":"IPS"},{"Level":"SD","Major":"Umum"}]
3B000-3[{"Level":"SMA","Major":"IPA"}]
4B000-4[{"Level":"SD","Major":"Umum"}]

由于使用SQL Server 2012,无法使用OPENJSON函数,需查询出Education字段中包含Level为'SMA'的记录。

解决方案

在SQL Server 2012中,只能通过字符串匹配实现需求,核心是精准匹配JSON结构中"Level":"SMA"这个键值对片段,同时避免误匹配类似"Level":"SMAN"这类情况。

基础查询语句如下:

SELECT ID, UserID, Education
FROM YourTableName
WHERE Education LIKE '%"Level":"SMA"%'

兼容格式差异的优化

如果JSON字符串中键名或值前后存在空格(比如"Level" : "SMA"),可以调整匹配规则兼容空格:

SELECT ID, UserID, Education
FROM YourTableName
WHERE Education LIKE '%"Level"%:"SMA"%'

若要兼容更多格式细节(比如键名或值使用单引号),可以用更宽松的匹配逻辑:

SELECT ID, UserID, Education
FROM YourTableName
WHERE Education LIKE '%["'']Level["'']%:["'']SMA["'']%'

注意

这种字符串匹配方法依赖JSON格式的稳定性,若存在嵌套JSON结构,可能出现误判,但在当前一维数组的场景下完全适用。

内容的提问来源于stack exchange,提问作者Irvan Affandy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 00:10:20