一段较复杂的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