当前位置: 代码迷 >> Sql Server >> 除去中括号及括号中内容
  详细解决方案

除去中括号及括号中内容

热度:15   发布时间:2016-04-24 09:34:44.0
去掉中括号及括号中内容
哈哈[内容]
怎么搞呢[/han]
[笑脸][哭吧]哈哈
sqlserver中一个表中的字段类似这样的,我想把这个表中的这个字段中的所有数据中含有中括号的,把中括号及中括号中内容去掉,剩余内容保留,有什么好的解决办法
------解决思路----------------------
http://bbs.csdn.net/topics/390742680 和你需求差不多的,参考一下吧
------解决思路----------------------

declare @i varchar(100)
set @i='999[123]9'
select replace(@i, SUBSTRING(@i,charINDEX('[',@i),(charINDEX(']',@i)-charINDEX('[',@i)+1)),'')


-------------------------------------------------------------------------------------------------------------------
9999

(1 行受影响)
------解决思路----------------------
CREATE FUNCTION dbo.MyReplace(@STR VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @INDEX1 INT,@INDEX2 INT
SET @INDEX1=CHARINDEX('[',@STR)
IF @INDEX1>0
BEGIN
WHILE @INDEX1>0
BEGIN
SET @INDEX2=CHARINDEX(']',@STR,@INDEX1)
IF @INDEX2>0
BEGIN
SET @STR=STUFF(@STR,@INDEX1,@INDEX2-@INDEX1+1,'')
SET @INDEX1=CHARINDEX('[',@STR)
END
ELSE
BREAK
END
END
RETURN @STR
END
PRINT dbo.MyReplace('1[21]1[909]7687')
可以建个自定函数包装处理下
------解决思路----------------------
--用了一个笨的CTE,期待楼下高人
with T1 as
(select '123[45]34[56]4[34]0' as s),
 T as
(select s=REPLACE(s,SUBSTRING(s,charindex('[',s),CHARINDEX(']',s)+1-charindex('[',s)),'') from T1
 union all
 select  REPLACE(s,SUBSTRING(s,charindex('[',s),CHARINDEX(']',s)+1-charindex('[',s)),'') from T where charindex('[',s)>0)
 
 select * from T where charindex('[',s)=0
------解决思路----------------------
WITH table1(col1) AS (
    SELECT N'哈哈[内容]' UNION ALL
    SELECT N'怎么搞呢[/han]' UNION ALL
    SELECT N'[笑脸][哭吧]哈哈'
)
SELECT Convert(xml,
               REPLACE(REPLACE(REPLACE(col1,
                                       '[/','<'),
                               '[','<'),
                       ']','/>')
              ).value('.','nvarchar(20)') col1
  FROM table1

col1
--------------------
哈哈
怎么搞呢
哈哈

------解决思路----------------------
CREATE FUNCTION Fun1
( @Text varchar(50))
RETURNs varchar(50)
AS
begin 
DECLARE @Left INT,@Right INT


SET @Right=CHARINDEX(']',@Text)
WHILE @Right>0
BEGIN
 SELECT @Left=CHARINDEX('[',REVERSE(LEFT(@Text, @Right)))
,@Text=STUFF(@Text,@Right-@Left+1,@Left,'')
,@Right=CHARINDEX(']',@Text)
END
RETURN @Text
END

DECLARE @TestStr VARCHAR(50) = '123[42]809[4[01]]321'
SELECT dbo.Fun1(@TestStr)
/*
123809321
*/



------解决思路----------------------
[]不配对就先替换成配对的。比如直接 REPLACE(col1,'[[]','')。
你不解释数据规则怎么做出你想要的结果。
用 CHARINDEX 处理的,'a[[]b' 得出 'ab','a[]]b' 得出 'a]b',你想要的就这个结果?
  相关解决方案