日期:2014-05-17  浏览次数:20434 次

SQL字段截取求教
初学者运行截取两个f之间的字段,有没有更好的方法!本人不知道f第N次出现的位置怎么写,所以就弄了个本方法。求大神们授业解惑也!
declare @t char(100),@s char(100) 
set @t='alfki77777777bfd'
set @s=substring(@t,patindex('%f%','alfkibfd')+1,len(@t))
print substring(@t,patindex('%f%',@t)+1,patindex('%f%',@s)-1)

字段:alfki77777777bfd
运行结果:ki77777777b
------解决方案--------------------

declare @t varchar(100),@s varchar(100)

set @t='alfki77777777bfd'

set @s=substring(@t,charindex('f',@t,1)+1,len(@t)-charindex('f',reverse(@t),1)-charindex('f',@t,1))

select @s 's'

/*
s
----------------------
ki77777777b

(1 row(s) affected)
*/

------解决方案--------------------
declare @t char(100),@s char(100) 
set @t='alfki77777777bfd'
set @s=substring(@t,patindex('%f%','alfkibfd')+1,len(@t))
print substring(@t,patindex('%f%',@t)+1,patindex('%f%',@s)-1)

--楼主的方法已经不错了
SELECT SUBSTRING(STUFF(@t,1,CHARINDEX('f',@t),''),1,CHARINDEX('f',STUFF(@t,1,CHARINDEX('f',@t),''))-1)
SELECT SUBSTRING(@t, CHARINDEX('f',@t)+1, LEN(@t) - CHARINDEX('f',@t) - CHARINDEX('f',REVERSE(RTRIM(@t))))
/*ki77777777b*/