Sql-Server

替換字元串的特定部分

  • January 13, 2021

我有一個包含多列、、APGRPID和的表。我想更改列中某些字元串的一部分。在我想替換設置的“值” 。VIRTKEY``LFDNR``PARAMETERLIST``PARAMETERLIST``PARAMETERLIST``PATH=

桌子:

我遇到的主要問題是列中PATH=參數位置的隨機性以及PARAMETERLIST列中元素數量的可變性,如果我嘗試使用CROSS APPLYaSTRING_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);

引用自:https://dba.stackexchange.com/questions/283128