如何从 sql 中的字符串中删除特定模式

how to remove specific pattern from string in sql

我有很多像下面这样的字符串

COLGATE GRF 75 GMS (Rs. 65)( 72 PCS )
COLGATE GRF 100 GM (RS.90) - RELAUNCH( 72 PCS )
COLGATE GRF 100 GM (RS.88) COLLECTIBLES( 72 PCS )
COLGATE GRF 100 GMS (Rs. 85)( 72 PCS )

并想从 sql 中的字符串中删除 (Rs. 65) 等。下面是我尝试过的。

select SUBSTRING ('COLGATE GRF 75 GMS (Rs. 65)( 72 PCS )',0,CHARINDEX('(','COLGATE GRF 75 GMS (Rs. 65)( 72 PCS )'))

您可以同时使用 SUBSTRINGREPLACE 函数来实现此目的:

DECLARE @STR VARCHAR(MAX)='COLGATE GRF 75 GMS (RS. 65)( 72 PCS )'

SELECT SUBSTRING (@STR,CHARINDEX('(',@STR),(CHARINDEX(')',@STR)-CHARINDEX('(',@STR))+1)

SELECT REPLACE (@STR,SUBSTRING (@STR,CHARINDEX('(',@STR),(CHARINDEX(')',@STR)-CHARINDEX('(',@STR))+1),'')

输出:

COLGATE GRF 75 GMS ( 72 PCS )

阅读您的意图,即从字符串中删除第一组括号(您对所有括号什么也没说)然后这只是一个语句:

declare @s varchar(100)='COLGATE GRF 100 GM (RS.88) COLLECTIBLES( 72 PCS )'
select Left(@s,CharIndex('(',@s)-1)+Right(@s,Len(@s)-charIndex(')',@s))

找出括号的开头和结尾。首先,使用 (Rs 查找。之后使用 STUFF() 将其删除。无论是否第一次出现,这都适用于 (Rs ??)。请注意,它只会删除第一次出现的内容。

SELECT  *, 
        STUFF(col, s, e - s + 1, '')
FROM    tbl t
        CROSS APPLY
        (
            SELECT s = CHARINDEX('(Rs', col)    
        ) s
        CROSS APPLY
        (
            SELECT e = CHARINDEX(')', col, s)
        ) e

dbfiddle demo