如何从 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 )'))
您可以同时使用 SUBSTRING
和 REPLACE
函数来实现此目的:
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
我有很多像下面这样的字符串
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 )'))
您可以同时使用 SUBSTRING
和 REPLACE
函数来实现此目的:
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