【问题标题】:Pulling GUIDs out of a JSON string in SQL Server从 SQL Server 中的 JSON 字符串中提取 GUID
【发布时间】:2021-06-23 11:19:51
【问题描述】:

我需要从 SQL Server 中的 json 字符串中提取一些 GUID。字符串可能如下所示的示例:

{"priorityArea":"a273b556-f0ab-4d7a-97ac-ddb7dab06130","priority":"Ensure best possible provision for pupils with specific behaviour issues","startDatePicker":"10/05/2019","deadlineDatePicker":"18/09/2019","userPicker":"48698,48693","actionWidget-1555338252504":"85e3ad8f-2586-4612-a9e7-e1c9d3f66181,6b66328f-c13f-4d8c-81ec-fccb8c1caa6e","resourceWidget-1557502650616":"98714348-cf7d-4583-89d5-c7d61cafea72","sdpGrade-1555338253145":"4"}

我需要的 GUID 是在“resourceWidget-[number]”之后的那个。即使 json 字符串每次看起来都一样,我也会为此苦苦挣扎,但还有更多挑战:

  1. resourceWidget 的位置根据前端行为在字符串中发生变化
  2. 每个字符串中“resourceWidget-”变化后出现的唯一编号
  3. 有时会在字符串中返回多个资源 GUID,例如

resourceWidget-1555338252504":"98714348-cf7d-4583-89d5-c7d61cafea72, 87ea276b-5b7f-4b44-b05e-775e9fd2690c

如果有人能提供帮助,将不胜感激。

【问题讨论】:

    标签: sql json sql-server guid


    【解决方案1】:

    看起来像一个简单的OPENJSON 电话和一个WHERE 会工作:

    DECLARE @JSON nvarchar(MAX) = N'{
        "priorityArea": "a273b556-f0ab-4d7a-97ac-ddb7dab06130",
        "priority": "Ensure best possible provision for pupils with specific behaviour issues",
        "startDatePicker": "10/05/2019",
        "deadlineDatePicker": "18/09/2019",
        "userPicker": "48698,48693",
        "actionWidget-1555338252504": "85e3ad8f-2586-4612-a9e7-e1c9d3f66181,6b66328f-c13f-4d8c-81ec-fccb8c1caa6e",
        "resourceWidget-1557502650616": "98714348-cf7d-4583-89d5-c7d61cafea72",
        "sdpGrade-1555338253145": "4"
    }';
    
    SELECT TRY_CONVERT(uniqueidentifier,[value]) AS resourceWidget
    FROM OPENJSON(@JSON)
    WHERE [key] LIKE N'resourceWidget-%';
    

    如果 JSON 可以包含分隔字符串,请添加 STRING_SPLIT:

    DECLARE @JSON nvarchar(MAX) = N'{
        "priorityArea": "a273b556-f0ab-4d7a-97ac-ddb7dab06130",
        "priority": "Ensure best possible provision for pupils with specific behaviour issues",
        "startDatePicker": "10/05/2019",
        "deadlineDatePicker": "18/09/2019",
        "userPicker": "48698,48693",
        "actionWidget-1555338252504": "85e3ad8f-2586-4612-a9e7-e1c9d3f66181,6b66328f-c13f-4d8c-81ec-fccb8c1caa6e",
        "resourceWidget-1555338252504":"98714348-cf7d-4583-89d5-c7d61cafea72, 87ea276b-5b7f-4b44-b05e-775e9fd2690c",
        "sdpGrade-1555338253145": "4"
    }';
    
    SELECT TRY_CONVERT(uniqueidentifier,TRIM(SS.[value])) AS resourceWidget --TRIM because your example has a leading space
    FROM OPENJSON(@JSON) OJ
         CROSS APPLY STRING_SPLIT(OJ.[value],',') SS
    WHERE OJ.[key] LIKE N'resourceWidget-%';
    

    【讨论】:

      猜你喜欢
      • 2019-08-06
      • 2021-12-08
      • 2021-11-22
      • 1970-01-01
      • 2021-07-03
      • 1970-01-01
      • 2016-11-24
      • 2020-10-15
      • 1970-01-01
      相关资源
      最近更新 更多