求助:SQL字符串问题(在线等)

wms05128 2010-09-16 10:22:27
有一字符串如下所示:‘ABC*BCD+A-MPP’,我要得到其中的ABC,BCD,A,MPP,意思就是剔除其中的+,-,*号,请问怎么实现
...全文
135 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kadboy 2010-09-16
  • 打赏
  • 举报
回复
declare @str varchar(1000)
set @str='ABC*BCD+A-MPP'

declare @Pos int,@Begin int
set @Pos=1
set @Begin=1
while(@Pos<=len(@str))
begin
if(charindex(substring(@str,@Pos,1),'*+-')>0)
begin
print substring(@str,@Begin,@Pos-@Begin)
set @Begin=@Pos+1
end
else if(@Pos=len(@str))
begin
print substring(@str,@Begin,@Pos-@Begin+1)
end
set @Pos=@Pos+1
end
pcbxhm 2010-09-16
  • 打赏
  • 举报
回复
厉害。。支持一下
「已注销」 2010-09-16
  • 打赏
  • 举报
回复
5# 能实现你的需要
「已注销」 2010-09-16
  • 打赏
  • 举报
回复
/*
名称:fn_split函数.
功能:实现字符串分隔功能的函数
*/
create function dbo.fn_split(@inputstr varchar(8000), @seprator varchar(10))
returns @temp table (a varchar(200))
as
begin
declare @i int
set @inputstr = rtrim(ltrim(@inputstr))
set @i = charindex(@seprator , @inputstr)
while @i >= 1
begin
insert @temp values(left(@inputstr , @i - 1))
set @inputstr = substring(@inputstr , @i + 1 , len(@inputstr) - @i)
set @i = charindex(@seprator , @inputstr)
end
if @inputstr <> '\'
insert @temp values(@inputstr)
return
end
go

--调用

DECLARE @str VARCHAR(100)
SET @str='ABC*BCD+A-MPP'
SET @str= replace(replace(REPLACE(@str,'*',','),'+',','),'-',',')

select * from
dbo.fn_split(@str,',')

a
------
ABC
BCD
A
MPP

(4 row(s) affected)
wms05128 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ws_hgo 的回复:]

SQL code
select replace(replace(replace('ABC*BCD+A-MPP','-',''),'*',''),'+','')
----------------------------------------------------------------------------------------------------------------------……
[/Quote]
能写个通用的替换函数吗?
wms05128 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ws_hgo 的回复:]

SQL code
select replace(replace(replace('ABC*BCD+A-MPP','-',''),'*',''),'+','')
----------------------------------------------------------------------------------------------------------------------……
[/Quote]

如果字符串为IF(ABC=1,0,ABC*2)这样子呢??我也要提取其中的ABC出来
ws_hgo 2010-09-16
  • 打赏
  • 举报
回复
select replace(replace(replace('ABC*BCD+A-MPP','-',''),'*',''),'+','')
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ABCBCDAMPP

(1 行受影响)
ws_hgo 2010-09-16
  • 打赏
  • 举报
回复
select replace(replace(replace('ABC*BCD+A-MPP','-',''),'*',''),'+','')
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ABCBCDAMPP

(1 行受影响)

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧