微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何从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 )',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,@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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。