分割排序函数:
CREATE  function F_split( 
                @s varchar(8000),          --包含多个数据项的字符串 
                @pos int,                --要获取的数据项的位置 
                @split varchar(10)        --数据分隔符 
)RETURNS float(20) 
AS 
BEGIN 
    IF @s IS NULL RETURN(NULL) 
    DECLARE @splitlen int                --分隔符长度 
    SELECT @splitlen=LEN(@split+'a')-2 
    WHILE @pos>1 AND charindex(@split,@s+@split)>0 
        SELECT @pos=@pos-1, 
            @s=stuff(@s,1,charindex(@split,@s+@split)+@splitlen,'') 
    RETURN(nullif(left(@s,charindex(@split,@s+@split)-1),'')) 
ENDmysql版怎么搞:

解决方案 »

  1.   

    MySQL可以直接用substring_index()函数.
      

  2.   

    除了SUBSTRING_INDEX() 外还可以看下ELT()
      

  3.   

    Select SUBSTRING_INDEX(SUBSTRING_INDEX('aa|cc|bb|dd','|',3),'|',-1)而且你的原内容中好像应该是RETURNS varchar(20) 吧
      

  4.   

    select (SUBSTRING_INDEX('aa|cc|bb|dd','|',3);
    高手
      

  5.   

    mysql> delimiter //
    mysql> drop function if exists F_split//
    Query OK, 0 rows affected (0.00 sec)mysql> CREATE  function F_split(
        ->                 i_str varchar(8000),          -- 包含多个数据项的字符串
        ->                 i_pos int,                -- 要获取的数据项的位置
        ->                 i_split varchar(10)        -- 数据分隔符
        -> )
        -> RETURNS float
        -> BEGIN
        ->  DECLARE i_splitlen int;                -- 分隔符长度
        ->   IF i_str IS NULL THEN
        ->          RETURN NULL;
        ->  END IF;
        ->
        ->   SET i_splitlen=CHAR_LENGTH(CONCAT(i_split,'a'))-2;
        ->   WHILE i_pos>1 AND INSTR(CONCAT(i_str,i_split),i_split)>0 DO
        ->     SET i_pos=i_pos-1;
        ->     SET i_str=RIGHT(i_str,CHAR_LENGTH(i_str)-INSTR(CONCAT(i_str,i_split),
    i_split)-i_splitlen);
        ->  END WHILE;
        ->  RETURN if(char_length(left(i_str,INSTR(CONCAT(i_str,i_split),i_split)-1)
    )>0,left(i_str,INSTR(CONCAT(i_str,i_split),i_split)-1),null);
        -> END;
        -> //
    Query OK, 0 rows affected (0.00 sec)
    mysql> delimiter ;
    mysql> select F_split('1,2,3,4,5.1,6',3,',') as num;
    +------+
    | num  |
    +------+
    |    3 |
    +------+
    1 row in set (0.00 sec)mysql>
      

  6.   

    mysql> select F_split('1,2,3,4,5.1,6',888,',') as num;
    +------+
    | num  |
    +------+
    | NULL |
    +------+
    1 row in set (0.00 sec)mysql>