2016-04-28 2 views
0

Die folgenden JSON-Daten sind eines der Felder in der Tabelle. In den folgenden JSON-Daten muss ich den Wert ersetzen, der "Nicht verfügbar" in expLevel in "Nicht aufgelistet" unter Verwendung der SQL-Abfrage hat.Ersetzen von Daten in JSON mithilfe der SQL-Abfrage

"Information": { 
     "Name": [], 
     "Class": [], 
     "Degree": ["Graduate or professional degree"], 
     "major": [], 
     "skill": [], 
     "expLevel": ["0 to 2 years", 
        "Not available", 
        "3 to 5 years"], 
     "certificationtype": "" 
    } 

Ich habe dies versucht:

update sr set filter = replace(filter, '"Not available"', '"available" , "listed"') 
from sharedreports_check sr 
where filter like '%"expLevel":[[]"%Not available%"%' 

Aber es ist nicht gearbeitet wird.

Bitte lassen Sie mich wissen, was die SQL-Abfrage sein wird, um es zu ersetzen.

+1

FYI, jetzt Json wird in SQL Server 2016 unterstützt. Jetzt können wir auf JSON-Typ abfragen, wie wir in XML-Typ abfragen. – KumarHarsh

Antwort

0

Versuchen Sie, diese

update sr set filter = replace(filter, 'Not available', 'Not listed') 
from sharedreports_check sr 
where filter like '%expLevel%Not available%' 
0

Wenn Sie diese json vor Ende manipulieren kann, dann ist es besser.

Eine andere Option ist CLR zu erstellen, wenn es sehr häufig Arbeit und Daten aus anderen Quellen gefüllt werden.

Versuchen Sie dieses Skript, ich denke, es wird funktionieren. (Für Test-Test versuchen Sie einige mehr Beispiel). Auch gibt es keine where-Klausel.

declare @i nvarchar(max)='"Information": { 
     "Name": [], 
     "Class": [], 
     "Degree": ["Graduate or professional degree"], 
     "major": [], 
     "skill": [], 
     "expLevel": ["0 to 2 years", 
        "Not available", 
        "3 to 5 years"], 
     "certificationtype": "" 
    }' 

-- 1st method 
select replace(@i, 'Not available', 'Not listed') 

-- 2nd method which is more accurate 
select replace(substring(col1,0,charindex(']',col1)),'Not available', 'Not listed') from 
(select substring (@i,charindex('expLevel"',@i)+len('expLevel"')+1,len(@i)) Col1)t4