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

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

我想知道最后一个#的位置,方法越简单越好
...全文
76 点赞 收藏 19
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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个#号的位置,因为后面还有很长一段字符
回复
相关推荐
基于java的企业人事管理系统设计--软件工程课程设计(含源码与论文设计).rar 1 引言 4 1.1 课程设计目标 4 1.2 编程工具(编程环境)介绍 4 1.3 实施时间及主要实施步骤 4 2 需求分析 5 3 系统总体设计 6 4 数据库设计 6 5 主要功能模块的设计与实现 10 5.1 功能模块1详细设计(综合查询员工信息)..........................................................10 5.1.1 详细设计.......................................................................................................10 5.1.2 算法流程........................................................................................................15 5.1.3 界面设计及测试结果.....................................................................................15 6 调试分析 15 7 用户手册 16 8 测试结果 17 8.1 员工信息的添加...................................................................................................17 8.2 员工信息的修改...................................................................................................17 8.3 员工信息的删除...................................................................................................18 8.4 员工信息的综合查询...........................................................................................18 8.5 员工信息按性别统计的结果................................................................................19 8.6 员工信息按状态统计的结果...............................................................................19 8.7 员工信息按职称统计的结果................................................................................20 9 结论 20 10 参考文献 20
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-04-01 01:44
社区公告
暂无公告