我需要替換與字符串中特定鍵相關聯的值。SQL - 在特定值後替換值的第一個實例
例如,我有一個這樣的字符串:
'{"Key1":"Value1", "Key2":"Value2", "KeyToUpdate":"ValueToUpdate", "Key3":"Value3", "Key4":"Value4"}'
將有一個名爲KeyToUpdate
關鍵。它將永遠是獨一無二的,並將永遠被引號包圍。然後我需要更新它的相應值。即在引號包圍的冒號後面找到的第一個字符串。在本例中,值爲ValueToUpdate
。同樣,冒號分隔符總是在那裏,值總是被引號括起來。
我期望的輸出,如果我更新了值UpdatedValue
將是:
'{"Key1":"Value1", "Key2":"Value2", "KeyToUpdate":"UpdatedValue", "Key3":"Value3", "Key4":"Value4"}'
我的問題是:
- 我怎麼能在一個更簡潔/清潔的方式做到這一點查詢
- 如何更改查詢以在列中的所有行上執行。
這裏是我的SQL:
DECLARE @Value NVARCHAR(256) = '{"Key1":"Value1", "Key2":"Value2", "KeyToUpdate":"ValueToUpdate", "Key3":"Value3", "Key4":"Value4"}'
DECLARE @KeyToFind VARCHAR(256) = '"KeyToUpdate":"'
DECLARE @LengthOfKeyToFind INT = LEN(@KeyToFind)
DECLARE @StartIndex INT = PATINDEX('%'[email protected]+'%',@Value)
DECLARE @EndIndex INT = CHARINDEX('"',SUBSTRING(@Value,@StartIndex + @LengthOfKeyToFind, LEN(@Value))) -1
SELECT STUFF(@Value, @StartIndex + @LengthOfKeyToFind, @EndIndex, 'UpdatedValue')
該字符串從哪裏來?看起來很奇怪,你有一個數據庫管理系統,你可以簡單地擁有一個鍵值表,並且更新會非常簡單,但是你正在處理一個你試圖解析的字符串。這樣的字符串操作可能會比DBMS更容易,而使用真正的編程語言。 –
@ThorstenKettner這是一個需要應用於單個表的一次性腳本(錯誤修復)。數據只是「記錄」我們需要存儲的數據,因此僅用於只讀目的。它不能也不應該作爲DBMS中的其他任何東西存儲。 – JBond
也許你可以解析你的json然後修改。看看這個:https://www.simple-talk.com/sql/t-sql-programming/consuming-json-strings-in-sql-server/ –