2016-04-28 6 views
0

以下のJSONデータは、表のフィールドの1つです。以下のJSONデータでは、expLevelの「利用不可」の値をSQLクエリを使用して「リストされていません」に置き換える必要があります。SQLクエリを使用したJSONのデータの置換

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

をしかし、それは働いていません。

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

私はこれを試してみました。

私はそれを置き換えるSQLクエリーが何であるか教えてください。

+1

FYI、Now JsonはSQL Server 2016でサポートされています。次に、xml型でクエリを実行するときと同様にjson型でクエリを実行できます。 – KumarHarsh

答えて

0

あなたは、フロントエンドでこのJSONを操作することができる場合、それは良いです。この

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

を試してみてください。

非常に頻繁に作業され、データが他のソースから移入される場合、CLRを作成することもできます。

このスクリプトを試してみると、うまくいくと思います。 また、where節は必要ありません。

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 
関連する問題