如何在mysql中拆分和选择行中的值

时间:2016-09-27 05:37:33

标签: mysql sql

CREATE DEFINER=`root`@`localhost` PROCEDURE `TestExampl2_SP`(in Array_Value varchar(255))
begin

  declare i int default 0;
  declare  loopcount int default 0;
  declare  arrayChar  varchar(50) ;
  declare isexist int(10) default 0;
  declare existString varchar(50);
  declare notexistString varchar(50) ;

 set loopcount=( select LENGTH(Array_Value) - LENGTH(REPLACE(Array_Value, ',', '')));

    while i<=loopcount do
   SET i = i + 1;
     set arrayChar  =(

    SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(Array_Value, ',', i), ',', -1));

    set isexist=(select count(*) from emp
                      where ename=arrayChar);                 

      if(isexist >0 ) then


          select  CONCAT_WS(',',existString,arrayChar) into existString;
      else

          select CONCAT_WS(',',notexistString,arrayChar) into notexistString;

       end if;


    END WHILE;

  select notexistString;


END

这是我的执行当我执行此程序时输入调用TestExampl2_SP(&#39; a,m,n,x,y,z&#39;)我得到notexistString =&#39; x,y,z& #39;但是我希望结果排成一行,即我必须用逗号分隔 像这样:

**value**
x
y
z

请建议我如何实现这一点。

1 个答案:

答案 0 :(得分:0)

您可以按照以下代码在sql中拆分字符串。

 CREATE FUNCTION SplitString
(


  @Input NVARCHAR(MAX),
  @Character CHAR(1)
)

RETURNS @Output TABLE (
      Item NVARCHAR(1000)
)
AS
BEGIN
      DECLARE @StartIndex INT, @EndIndex INT

      SET @StartIndex = 1
      IF SUBSTRING(@Input, LEN(@Input) - 1, LEN(@Input)) <> @Character
      BEGIN
            SET @Input = @Input + @Character
      END

      WHILE CHARINDEX(@Character, @Input) > 0
      BEGIN
            SET @EndIndex = CHARINDEX(@Character, @Input)

            INSERT INTO @Output(Item)
            SELECT SUBSTRING(@Input, @StartIndex, @EndIndex - 1)

            SET @Input = SUBSTRING(@Input, @EndIndex + 1, LEN(@Input))
      END

      RETURN
END

并使用

进行检查
SELECT Item FROM dbo.SplitString('Apple,Mango,Banana,Guava', ',')