想请教下sql server 中如何判断一个字符串中某个字符是第几位?然后把这个字符前面的内容删除?

举例,有一个字符串如下

"世界杯!德国队加油!中国队也加油!法国队加油!日本队出局!"

我想判断上述字符串中,第一个叹号号是第几位,接着第二个叹号是第几位。。。?这个应该要怎么做,需要用到什么函数呢?

用EXCEL的话就是用find函数来判断第几位的的,如用excel中输入”=FIND("!","世界杯!德国队加油!中国队也加油!法国队加油!日本队出局!",1)“,则返回值就是4,即第四位。

这个在sql server应该用哪个函数实现?请各路高手指点一二,谢谢!

直接用你上面的例子,
--定义被操作的字符串,并赋值
declare @str varchar(100)
set @str = '世界杯!德国队加油!中国队也加油!法国队加油!日本队出局!'
--获取第一个 ! 的位置
select CHARINDEX('!',@str)
--获取第一个 ! 后面的字符串
select SUBSTRING(@str,CHARINDEX('!',@str)+1,LEN(@str)-CHARINDEX('!',@str))
如果想要找到第二个 ! 或者第三个 ! 就需要用循环来做了,但是你如果明白了上面的,后面的就简单了。追问

看明白了,谢谢你,不过还是想追问一下如果我想让其输出结果为

世界杯!
德国队加油!
中国对也加油!
法国队加油!
日本队出局!

这个应该要怎么做呢?我只知道是要用到循环。。。

追答

昨天没看到,呵呵,其实也很好写
declare @str varchar(100),@temp varchar(20),@index int
set @str = '世界杯!德国队加油!中国队也加油!法国队加油!日本队出局!'

while(CHARINDEX('!',@str) > 0)
begin
select @index = CHARINDEX('!',@str)
select @temp = SUBSTRING(@str,1,@index)
select @str = SUBSTRING(@str,@index+1,LEN(@str)-@index)
print @temp
end

写法和高级语言都差不多,记住两点就可以了
1、可以不写 ;
2、begin end就相当于高级语言中的{ }

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-17
Select charindex('!','世界杯!德国队加油!中国队也加油!法国队加油!日本队出局!')
第2个回答  2014-06-17
运行一下你就懂了

--第一个
select isnull(stuff('世界杯!德国队加油!中国队也加油!',1,charindex('!','世界杯!德国队加油!中国队也加油!'),''),'世界杯!德国队加油!中国队也加油!'),charindex('!','世界杯!德国队加油!中国队也加油!')
--第二个
select isnull(stuff('世界杯!德国队加油!中国队也加油!',1,charindex('!','世界杯!德国队加油!中国队也加油!',charindex('!','世界杯!德国队加油!中国队也加油!')+1),''),'世界杯!德国队加油!中国队也加油!'),
charindex('!','世界杯!德国队加油!中国队也加油!',charindex('!','世界杯!德国队加油!中国队也加油!')+1),
相似回答