表A
ID    TYPE
1     1|6
2     1|45
3     1|892如何把提取成下面的这种格式ID    TYPE
1     6
2     45
3     892

解决方案 »

  1.   

    取|后面的数据?..
    type会有多少个|?
      

  2.   

    SELECT ID,
           RIGHT(type,CHARINDEX('|',REVERSE(type))-1) AS type
    FROM tb
      

  3.   

    ---------------------------------
    --  Author: liangCK 小梁
    --  Date  : 2008-11-14 15:20:46
    ---------------------------------
     
    --> 生成测试数据: @T
    DECLARE @T TABLE (ID VARCHAR(2),TYPE VARCHAR(5))
    INSERT INTO @T
    SELECT '1','1|6' UNION ALL
    SELECT '2','1|45' UNION ALL
    SELECT '3','1|892'--SQL查询如下:SELECT ID,
           RIGHT(type,CHARINDEX('|',REVERSE(type))-1) AS type
    FROM @T
    /*
    ID   type
    ---- -----
    1    6
    2    45
    3    892(3 行受影响)
    */
      

  4.   

    DECLARE @T TABLE(ID INT,    TYPE VARCHAR(10)) 
    INSERT @T SELECT 1,    '1|6' 
    INSERT @T SELECT 2,    '1|45' 
    INSERT @T SELECT 3,    '1|892'
    SELECT RIGHT(TYPE,LEN(TYPE)-CHARINDEX('|',TYPE)) FROM @T 
    /*           
    ---------- 
    6
    45
    892
    */
      

  5.   

    忘记说了里面还存在这种格式
    表A 
    ID    TYPE 
    1    1|6 
    2    1|45 
    3    1|892 
    4     -1 
      

  6.   


    select ID, type =
      case when CHARINDEX('|',type) > 0 then substring(type,CHARINDEX('|',type)+1,len(type) - CHARINDEX('|',type))
      else type end
                       
    from
    表A
      

  7.   

    SELECT RIGHT(TYPE,LEN(TYPE)-CHARINDEX('|',TYPE)) FROM @T •RIGHT()
    RIGHT() 函数返回部分字符串,其语法如下:
      RIGHT (<character_expression>, <integer_expression>)
      RIGHT() 函数返回的子串是从字符串右边第integer_expression 个字符起到最后一个字符的部分。若integer_expression 为负值,则返回NULL 值。
    •CHARINDEX()
    CHARINDEX() 函数返回字符串中某个指定的子串出现的开始位置,其语法如下:
      CHARINDEX (<’substring_expression’>, <expression>)
      其中substring _expression 是所要查找的字符表达式,expression 可为字符串也可为列名表达式。如果没有发现子串,则返回0 值。此函数不能用于TEXT 和IMAGE 数据类型。授人以鱼不如授人以渔!