declare @s as varchar(200)
set @s='AA21_P1_12345678'我要得到其中P1子字符串,@s字符串可能形式如下
AA1_P1_12345678
AA1_P12_12345678
AA12_P12_1234
AA1_P12_12349995678
规则是第一个下划线前面可能有3或4个字符,第2个下划线后面可能有若干个未知数木的字符
P后面可能有1或2位字符请帮忙

解决方案 »

  1.   

    SELECT SUBSTRING(STUFF(@S,1,CHARINDEX('-',@S),''),1,
    CHARINDEX('-',STUFF(@S,1,CHARINDEX('-',@S),''))-1)
      

  2.   

    declare @s as varchar(200)
    set @s='AA21_P1_12345678'SELECT SUBSTRING(STUFF(@S,1,CHARINDEX('_',@S),''),1,CHARINDEX('_',STUFF(@S,1,CHARINDEX('_',@S),''))-1)P1(所影响的行数为 1 行)
      

  3.   

    declare @s as varchar(200)set @s='AA21_P1_12345678'
    print substring(@s,charindex('_',@s)+1,charindex('_',@s,charindex('_',@s)+1)-charindex('_',@s)-1)set @s='AA1_P12_12345678'
    print substring(@s,charindex('_',@s)+1,charindex('_',@s,charindex('_',@s)+1)-charindex('_',@s)-1)set @s='AA12_P12_1234'
    print substring(@s,charindex('_',@s)+1,charindex('_',@s,charindex('_',@s)+1)-charindex('_',@s)-1)set @s='AA1_P12_12349995678'
    print substring(@s,charindex('_',@s)+1,charindex('_',@s,charindex('_',@s)+1)-charindex('_',@s)-1)/*
    P1
    P12
    P12
    P12
    */
      

  4.   

    如果@s='ABD'或@s='AF_B'
    就是说没有2个下划线,以上运算错误,我希望这种情况返回空字符串,请问如何写?