select
    case when charindex('-',t.str)=0 then null
         else reverse(stuff(reverse(str),1,charindex('-',reverse(str)),''))
    end as newstr
from
    (select '[1]-[2]-[3]-[4]-[5]' as str union select '[2]-[5]-[1]' union select '[2]') t/*
newstr
--------------------
[1]-[2]-[3]-[4]
NULL
[2]-[5]
*/

解决方案 »

  1.   


    --> 测试时间:2009-07-09 17:28:30
    --> 我的淘宝: http://shop36766744.taobao.com/if object_id('[tab]') is not null drop table [tab]
    create table [tab]([A] varchar(19))
    insert [tab]
    select '[1]-[2]-[3]-[4]-[5]' union all
    select '[2]-[5]-[1]' union all
    select '[2]'select case when charindex('-',A)>0 then left(A,len(A)-charindex('-',REVERSE(A))) else null end from [tab] /*
                        
    ------------------- 
    [1]-[2]-[3]-[4]
    [2]-[5]
    NULL(所影响的行数为 3 行)
    */drop table tab
      

  2.   

    DECLARE @tab TABLE 
    (NAME VARCHAR(20))
    INSERT INTO @tab 
    SELECT '[1]-[2]-[3]-[4]-[5]' UNION ALL 
    SELECT '[2]-[5]-[1]'  UNION ALL 
    SELECT '[2]'SELECT 
    CASE WHEN CHARINDEX('-',NAME) = 0 THEN NULL ELSE 
    REVERSE(SUBSTRING(REVERSE(NAME),CHARINDEX('-',REVERSE(NAME)) +1,
    LEN(NAME) - CHARINDEX('-',REVERSE(NAME)) + 1))  END 
     FROM @tab--------------------
    [1]-[2]-[3]-[4]
    [2]-[5]
    NULL(3 行受影响)