MSSQL update 更新字符串语句

某字段格式如:用户名[IP值]
想去掉IP值和方括号,只保留用户名,请问SQL更新语句该怎么写好?

update è¡¨å set å­—段=replace(字段,substring(字段,charindex('[',字段),len(字段)-charindex('[',字段)+1),'')

你先备份一下,执行下上边这条

追问

执行这个语句,能删除 [ 后面的字符串,但那些不含 [ 的记录,则删除了全部字符。

追答

你的意思是有些数据不带[吧?

 

   

那就

update è¡¨å set å­—段=replace(字段,substring(字段,charindex('[',字段),len(字段)-charindex('[',字段)+1),'')  where å­—段 like '%[%'

追问

为慎重起见,我加了一个条件:where id=100 and 字段 like '%[%' 但是不能删除 [ 后面的字符串。不知为什么?

追答

你那个是只有半个括号,还是一对括号是完整的?

你能罗列点几种不同的数据吗?

追问

是一对完整的方括号,方括号里面是一组IP值,方括号前面是汉字用户名,2-4个汉字。

追答

我这没问题啊

 

我就随便写了个数据

select replace('zhang[192,1023,34]',substring('zhang[192,1023,34]',charindex('[','zhang[192,1023,34]'),len('zhang[192,1023,34]')-charindex('[','zhang[192,1023,34]')+1),'')

这样是会把中括号里的东西以及中括号给去掉的,只保留前边的那个zhang

追问

那是不是“字段名 like '%[%' ”判断有问题?
因为有些记录只有用户名没有方括号,有些记录有用户名也有括号带IP值,我的目的是要把那些有括号的IP值去掉,让所有记录只有用户名。

追答

你先

select replace(字段,substring(字段,charindex('[',字段),len(字段)-charindex('[',字段)+1),'') from 表名

 

看看你这些记录是否都符合你要更改后的那种形式,在不行的话,我你,你查收下,这样问来问去好麻烦,还解决不了问题,浏览器右上角

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-16
update table set user=substr(user,1,instr(user,'[')-1) 没亲测,不过应该没有问题,呵呵……追问

返回“'instr' 不是可以识别的函数名”

追答

上面的是Oracle 的写法,
SQL Server 写法应该是这样的:

update table set user=substring(user,1,charindex('[',user)-1)

亲测,OK

不同的数据库中 定义的关键字略有不同,写法上也是稍有差异

有问题欢迎提问,满意请采纳!

第2个回答  推荐于2016-07-15
试试以下:
DECLARE @tb table(id int,num INT,mat INT)
insert @tb select 1,8,1
insert @tb select 3,8,-1
insert @tb select 2,4,1
insert @tb select 6,7,-1
insert @tb select 4,3,1
insert @tb select 5,3,1
SELECT * FROM @tb ORDER BY id

declare @count INT set @count=0;
WITH a1 AS
(
SELECT *,ROW_NUMBER() OVER (ORDER BY id) re FROM @tb
)
update @tb SET @count=(CASE WHEN CONVERT(INT,mat)>0 THEN @count+num ELSE @count END ),num=@count
select * from @tb ORDER BY id