首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

一段较复杂的SQL语句,该如何解决

2012-03-07 
一段较复杂的SQL语句有一列的字段值是这样:ZBX26001-84,ZBX26002-84,ZBX77001-84,ZBX87001-84,ZBX60002-36

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

热点排行