【有什么简单的方法获得字符串的位置】

viva369 2008-04-01 01:44:51
declare @ErrorMesage varchar(70)
set @ErrorMesage = 'a#b#c-d#'

我想知道最后一个#的位置,方法越简单越好
...全文
101 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
WYHJK 2008-04-01
  • 打赏
  • 举报
回复
上面的都不对,也不看看人家的需求


declare @ErrorMesage varchar(70) ,@cnt int,@ErrorMesage_old varchar(70)
select @cnt=3--可根据实际情况,来改变其值,你这里就是10
set @ErrorMesage = 'a#b#c-d#...'
select @ErrorMesage_old=@ErrorMesage
while @cnt>0
begin
set @ErrorMesage=substring(@ErrorMesage,charindex('#',@ErrorMesage)+1,len(@ErrorMesage))
set @cnt=@cnt-1
end
select @cnt=len(@ErrorMesage_old)-len(@ErrorMesage)最后@cnt就是你要的值
--print isnull @ErrorMesage
--print @cnt
huangjh_love 2008-04-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 bqb 的回复:]
SQL codedeclare @ErrorMesage varchar(70)
set @ErrorMesage = 'a#b#c-d#'
select len(@ErrorMesage)-charindex('#',reverse(@ErrorMesage))+1

/*
---
8

*/
[/Quote]
这个是对的
huangjh_love 2008-04-01
  • 打赏
  • 举报
回复
select  len('a#b#c-d#ggsdfsdfasdf')- charindex('#',reverse('a#b#c-d#ggsdfsdfasdf'))+1


8
bqb 2008-04-01
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 viva369 的回复:]
9楼的是对的,不过可惜的是我实际的应用中要的是第10个#号的位置,各位帮帮忙还有没有更好的方法~
[/Quote]


如果是取最后一个下面这个应该是比较直观的

declare @ErrorMesage varchar(70)
set @ErrorMesage = 'a#b#c-d#'
select len(@ErrorMesage)-charindex('#',reverse(@ErrorMesage))+1

/*
---
8
*/

如果是取第几个不确定的话,可以用我上面14楼的函数
viva369 2008-04-01
  • 打赏
  • 举报
回复
9楼的是对的,不过可惜的是我实际的应用中要的是第10个#号的位置,各位帮帮忙还有没有更好的方法~
bqb 2008-04-01
  • 打赏
  • 举报
回复
/****函数说明:查询字符在字符串中第几次出现的位置 *******/

create Function StrSite(@Str varchar(2000) ,@Word varchar(20) ,@TimesNo int)
returns int
as
begin
declare @i int,@Times int
declare @WordLen int
set @Times=0
set @i=1
set @Wordlen=len(@Word)

while (@i< Len(@Str)+1 )
begin
if substring(@Str,@i,@Wordlen)=@word
set @times=@times+1
--print '第'+cast(@i as varchar(20)) +'是 : ' +cast(@Times as varchar(20))

if @times=@TimesNo
break
set @i=@i+1
end
return (@i)
end

go


declare @ErrorMesage varchar(70)
set @ErrorMesage = 'a#b#c-d#'


select dbo.StrSite(@ErrorMesage,'#',3)
/*
---
8
*/

drop function dbo.StrSite
viva369 2008-04-01
  • 打赏
  • 举报
回复
都不对呀,我说的是第3个#号出现的位置
例如

declare @ErrorMesage varchar(70)
set @ErrorMesage = 'a#b#c-d#qq#45!#'

应该是8,还有有别的方法呢
WYHJK 2008-04-01
  • 打赏
  • 举报
回复
不好意思,没看到前面的那么多回复
ojuju10 2008-04-01
  • 打赏
  • 举报
回复
假如有3个以上的'#',还是9楼号啊,虽然麻烦了点
WYHJK 2008-04-01
  • 打赏
  • 举报
回复
说的不够清楚吧,到底是获取其中某个特定字符的,还是最后一个的,还是什么样的?
ojuju10 2008-04-01
  • 打赏
  • 举报
回复

declare @ErrorMesage varchar(70)
set @ErrorMesage = 'a#b#c-d#'

select charindex('#',@errormesage,charindex('#',@errormesage,charindex('#',@errormesage)+1)+1)

bqb 2008-04-01
  • 打赏
  • 举报
回复
declare @ErrorMesage varchar(70)  
set @ErrorMesage = 'a#b#c-d#'
select len(@ErrorMesage)-charindex('#',reverse(@ErrorMesage))+1

/*
---
8

*/
chenxin2835 2008-04-01
  • 打赏
  • 举报
回复
2楼正解
bqb 2008-04-01
  • 打赏
  • 举报
回复
declare @ErrorMesage varchar(70)
set @ErrorMesage = 'a#b#c-d#'
select charindex('#',reverse(@ErrorMesage))

/*
---
1
*/
中国风 2008-04-01
  • 打赏
  • 举报
回复
--这样

select len(@s)-charindex('#',reverse(@s))+1
bqb 2008-04-01
  • 打赏
  • 举报
回复
select charindex('#',reverse('a#b#c-d#'))
中国风 2008-04-01
  • 打赏
  • 举报
回复
select len(@s)-charindex('#',@s)+1
中国风 2008-04-01
  • 打赏
  • 举报
回复
select len(@s)-right(@s,charindex('#',@s))+1
viva369 2008-04-01
  • 打赏
  • 举报
回复
应该说是第3个#号的位置,因为后面还有很长一段字符

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧