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

请教在select问题(不用存储过程)


表中有1列,字段内容如下
programName
DDDD9443/002_255_1024K  ->002_255_1024K
ADE9443/002_255_2048K   ->002_255_2048K
007_255_1024K           ->007_255_1024K

现在需要取"/"右边,如果没有"/"就无需截取(如上所示)



//这是我写的  是有问题的
substring(
programName, 
CHARINDEX('/', programName)-1, 
CHARINDEX('_', programName, CHARINDEX('/', programName)-1)-1-CHARINDEX('/', programName)-1 )

我觉得这个牵涉的if else了,但是执行该语句必须写在程序中(不能用存储过程),不知道如何解决 

------解决方案--------------------
select (case when charindex('/',programName)>0 then 
stuff(programName,1,charindex('/',programName),'') else programName end)programName from tb

------解决方案--------------------

with tb(a) as (
select 'DDDD9443/002_255_1024K' union all   
select 'ADE9443/002_255_2048K' union all   
select '007_255_1024K' ) 
select substring(a,charindex('/',a)+1,len(a)-charindex('/',a))from tb

运行结果
002_255_1024K
002_255_2048K
007_255_1024K
------解决方案--------------------

select left(programName,charindex('/',programName+'/')-1)