【发布时间】:2019-01-29 14:32:43
【问题描述】:
我有一些 JSON 字符串,其中一些匹配以下内容:
{"name":"Example diagnosis 1","code":"111609001","table":"SNOMEDCT","addedby":"EDnurse","dateadded":1548080768169,"qualifier":[{"name":"Qualifier","value":"Confirmed Diagnosis","code":"410605003","prefix":"[C] "},{"name":"Left/Right","value":"Bilateral","code":"51440002","suffix":" - Bilateral"}],"prefix":"[C] ","suffix":" - Bilateral"},{"name":"Example diagnosis 2","code":"371162008","table":"SNOMEDCT","addedby":"EDnurse","dateadded":1548080778007,"qualifier":[{"name":"Qualifier","value":"Confirmed Diagnosis","code":"410605003","prefix":"[C] "},{"name":"Left/Right","value":"Bilateral","code":"51440002","suffix":" - Bilateral"}],"prefix":"[C] ","suffix":" - Bilateral"}
我已经构建了以下 case 语句,它部分工作,并返回以下字符串,并带有回车符和换行符,替换逗号:
{"name":"Example diagnosis 1","code":"111609001","table":"SNOMEDCT","addedby":"EDnurse","dateadded":1548080768169,"qualifier":[{"name":"Qualifier","value":"Confirmed Diagnosis","code":"410605003","prefix":"[C] "},{"name":"Left/Right","value":"Bilateral","code":"51440002","suffix":" - Bilateral"}],"prefix":"[C] ","suffix":" - Bilateral"}
{"name":"Example diagnosis 2","code":"371162008","table":"SNOMEDCT","addedby":"EDnurse","dateadded":1548080778007,"qualifier":[{"name":"Qualifier","value":"Confirmed Diagnosis","code":"410605003","prefix":"[C] "},{"name":"Left/Right","value":"Bilateral","code":"51440002","suffix":" - Bilateral"}],"prefix":"[C] ","suffix":" - Bilateral"}
这是我的 CASE 声明:
select
CASE
WHEN notevalue LIKE '%"suffix":" - Bilateral"},%'
THEN REPLACE(substring(LEFT(cast(notevalue as varchar(8000)),DATALENGTH(cast(notevalue as varchar(8000)))-1), 2, 8000),'"suffix":" - Bilateral"},','"suffix":" - Bilateral"}'+CHAR(13)+CHAR(10))
ELSE substring(LEFT(cast(notevalue as varchar(8000)),DATALENGTH(cast(notevalue as varchar(8000)))-1), 2, 8000)
END as test
from clinicalnotesdata
where notekey = 'ed diagnosis'
and visitid = '6948'
但是,我还需要将其他 2 个实例添加到我的 CASE 语句中以捕获其他字符串(它们都单独工作)。一旦我将案例的 3 个场景结合起来,它显然与第一个场景匹配并结束。但有时字符串匹配所有 3 个场景。
WHEN notevalue LIKE '%"prefix":"[[]C] "},%'
THEN REPLACE(substring(LEFT(cast(notevalue as varchar(8000)),DATALENGTH(cast(notevalue as varchar(8000)))-1), 2, 8000),'"prefix":"[C] "}],"prefix":"[C] "},','"prefix":"[C] "}],"prefix":"[C] "}'+CHAR(13)+CHAR(10))
WHEN notevalue LIKE '"%prefix":"[[]C] ","suffix":" - Right"},%'
THEN REPLACE(substring(LEFT(cast(notevalue as varchar(8000)),DATALENGTH(cast(notevalue as varchar(8000)))-1), 2, 8000),'"prefix":"[C] ","suffix":" - Right"},','"prefix":"[C] ","suffix":" - Right"}'+CHAR(13)+CHAR(10))
基本上我需要用 CHAR(13)+CHAR(10) 替换特定的逗号,其中满足上述 3 条标准的全部或部分。
有什么想法吗?谢谢。
【问题讨论】:
-
如果您使用的是更新版本的 SQL Server,那么您可能需要查看它具有的 JSON API。使用它可能比尝试使用基本字符串函数更容易。
-
是的,谢谢 - 不幸的是我们在 2014 年 :(