日期:2014-05-18  浏览次数:20739 次

一段较复杂的SQL语句
有一列的字段值是这样:
ZB   X   26001-84,ZB   X   26002-84,ZB   X   77001-84,ZB   X   87001-84,ZB   X   60002-36,ZB   X   60002-1989,ZB   X   60002-1998,


要将 "- "后 ", "前的是两个字符的加上 "19 ",如果是四个字符的不处理   这种SQL语句怎么写?



------解决方案--------------------
declare @str varchar(8000)
set @str= 'ZB X 26001-84,ZB X 26002-84,ZB X 77001-84,ZB X 87001-84,ZB X 60002-36,ZB X 60002-1989,ZB X 60002-1998, '

while patindex( '%-__,% ',@str)> 0
begin
set @str = stuff( @str, patindex( '%-__,% ',@str)+1 ,0 , '19 ')
end
print @str

/*
ZB X 26001-1984,ZB X 26002-1984,ZB X 77001-1984,ZB X 87001-1984,ZB X 60002-1936,ZB X 60002-1989,ZB X 60002-1998,
*/
------解决方案--------------------
declare @s varchar(8000)
set @s= 'ZB X 26001-84,ZB X 26002-84,ZB X 77001-84,ZB X 87001-84,ZB X 60002-36,ZB X 60002-1989,ZB X 60002-1998 '


select replace(replace(@s, '-84 ', '-1984 '), '-36 ', '-1936 ')

ZB X 26001-1984,ZB X 26002-1984,ZB X 77001-1984,ZB X 87001-1984,ZB X 60002-1936,ZB X 60002-1989,ZB X 60002-1998

(1 row(s) affected)
------解决方案--------------------
declare @a table(a varchar(200))
insert @a select 'ZB X 26001-84,ZB X 26002-84,ZB X 77001-84,ZB X 87001-84,ZB X 60002-36,ZB X 60002-1989,ZB X 60002-1998, '

while exists(select 1 from @a where patindex( '%-[0-9][0-9],% ',a)> 0)
begin
update @a set a=stuff(a,patindex( '%-[0-9][0-9],% ',a)+1,0, '19 ')
end

select * from @a