Sql-Server
替換字元串的特定部分
我有一個包含多列、、
APGRPID
和的表。我想更改列中某些字元串的一部分。在我想替換設置的“值” 。VIRTKEY``LFDNR``PARAMETERLIST``PARAMETERLIST``PARAMETERLIST``PATH=
桌子:
我遇到的主要問題是列中
PATH=
參數位置的隨機性以及PARAMETERLIST
列中元素數量的可變性,如果我嘗試使用CROSS APPLY
aSTRING_SPLIT()
或任何東西。平台:Microsoft SQL Server Enterprise(版本 14.0.1000.169)
給定您的測試數據,這將解析出您想要的字元串部分,或者在 之後的第一個分號之間
PATH=
,或者如果不存在,則在字元串的末尾。從這裡,您應該能夠使用更新來替換字元串的該部分。進一步閱讀:獲取兩個分隔符之間的文本
SELECT x.*, SUBSTRING(x.PARAMETERLIST, CHARINDEX('PATH=', x.PARAMETERLIST) + LEN('PATH='), CASE WHEN x.PARAMETERLIST NOT LIKE '%PATH=%;%' THEN LEN(x.PARAMETERLIST) ELSE CHARINDEX(';', x.PARAMETERLIST, CHARINDEX('PATH=', x.PARAMETERLIST) + LEN('PATH=')) - LEN('PATH=') - CHARINDEX('PATH=', x.PARAMETERLIST) END ) AS parsed_string FROM ( VALUES ('KF=138;SCANANDSEND=TRUE;ENDBARCODE=999999999999;PATH=K:\SSTEST;BARCODELENGTH=8'), ('KF=138; PATH=s:\'), ('DESIGNATION=JOB; KF=81; PATH=w:; SENDALLDATA=TRUE'), ('KF=76; PATH=\srv05\L3OERAPMFC; SENDALLDATA=TRUE'), ('KF=386; PATH=W:; SENDALLDATA=TRUE') ) AS x(PARAMETERLIST);