注册 登录
编程论坛 SQL Server论坛

[求助]charindex的使用

chenxiang 发布于 2007-09-28 18:33, 1408 次点击
student 表中只有一个字段name,varchar,如果name中含有'.',则将'.'后字符删去,
我想用下列方法解决,可以吗,如果不可以,请各位大虾说下原因
declare @integer int
update student set name=
case
when charindex('.',name)>0 then select @integer=charindex('.',name)
else select @integer=len(name)
end
left(name,@integer)

报错

服务器: 消息 156,级别 15,状态 1,行 4
在关键字 'select' 附近有语法错误。
服务器: 消息 156,级别 15,状态 1,行 5
在关键字 'else' 附近有语法错误。
服务器: 消息 156,级别 15,状态 1,行 6
在关键字 'end' 附近有语法错误。
14 回复
#2
purana2007-09-28 18:58

create table #t(
name varchar(50)
)
insert into #t values('ms-sqlserver')
insert into #t values('name.tt')
insert into #t values('efadf')
insert into #t values('cvadfe.aetf')

update #t
set name=case
when charindex('.',name)>1 then left(name,charindex('.',name)-1)
else name
end

select name from #t
drop table #t

#3
西风独自凉2007-09-29 09:17
用替換函數...
update 表 set name=case when charindex('.',name)>1 then replace(name,'.','') else name end
#4
purana2007-09-29 09:22
他是说将.后的字符串删除.不是去掉.
#5
西风独自凉2007-09-29 09:23

汗...沒看清...

#6
西风独自凉2007-09-29 09:26
也只要一句,好像沒必要要那麼多...
update 表 set name=case when charindex('.',name)>1 then left(name, charindex('.',name,1)-1) else name end
#7
purana2007-09-29 09:28

那你不是抄我?..晕菜..

#8
西风独自凉2007-09-29 09:51
暈...誰叫你寫那麼多...
#9
西风独自凉2007-09-29 09:54
这样总没有抄人你的吧。。。
update 表 set name=case when charindex('.',name)>1 then stuff(name, len(name)-charindex('.',name,1),'') else name end
#10
purana2007-09-29 10:00
思路是抄我的..
#11
西风独自凉2007-09-29 10:29

汗。。。。

#12
chenxiang2007-09-29 23:31

各位大虾,不好意思,是我表述不清,你们给的方法我会用,只不过我想通过使用定义变量的方式实现,可以吗

#13
purana2007-09-30 09:39
不同的场合,选择使用变量或不使用变量,
你这程序不需要用变量。
#14
chenxiang2007-10-01 01:34
恩,谢谢版主,我知道了
#15
Kendy1234562007-10-08 17:06
purana的版权意识好强咯...
1