Mysql中存储过程或函数 如何将逗号分隔的字符串倒序输出 如 :4531,8651,3256 变为: 3256,8651,4531

 我来答
匿名用户
2013-06-08
展开全部
DELIMITER //

DROP FUNCTION ReverseWordBy //

CREATE FUNCTION ReverseWordBy(pOldVal TINYTEXT,  pDivChar  CHAR(1))
RETURNS TINYTEXT
BEGIN
  /** 预期结果.  **/
  DECLARE vResult TINYTEXT;
  -- 当前逗号的位置. 
  DECLARE vIndex INT;
  -- 前一个逗号的位置. 
  DECLARE vPrevIndex INT;

  -- 查询第一个 逗号的位置.
  SET vIndex = INSTR(pOldVal, pDivChar);
  
  IF vIndex = 0 THEN
    -- 参数中没有逗号,直接返回.
    RETURN pOldVal;
  END IF;

  -- 初始化情况,前一个逗号不存在.
  SET vPrevIndex = 0;
  -- 初始化结果为空白字符.
  SET vResult = '';
  
  -- 循环处理。
  WHILE vIndex > 0 DO
    -- 设置结果 = 本次查询的结果 ,  以前的查询结果.
    SET vResult = CONCAT(SUBSTRING(pOldVal, vPrevIndex + 1, (vIndex-vPrevIndex-1)), pDivChar, vResult);
-- 前一个逗号的位置 = 当前逗号的位置
SET vPrevIndex = vIndex;
-- 查询下一个逗号的位置.
SET vIndex = LOCATE(pDivChar,  pOldVal,  vPrevIndex + 1);  
  END WHILE;
  
  -- 最后追加最后一组数据.
  SET vResult = CONCAT(SUBSTRING(pOldVal, vPrevIndex + 1), pDivChar, vResult);
  
  -- 清除掉最后一个 逗号.
  SET vResult = LEFT(vResult, LENGTH(vResult)-1);
  
  -- 返回结果.  
  RETURN vResult;
END;
//


DELIMITER ;

SELECT ReverseWordBy('4531,8651,3256',   ',') A;

SELECT ReverseWordBy('1,12,123,1234,12345,123456',   ',') B;



输出结果:

mysql> SELECT ReverseWordBy('4531,8651,3256',   ',') A;
+----------------+
| A              |
+----------------+
| 3256,8651,4531 |
+----------------+
1 row in set (0.00 sec)

mysql>
mysql> SELECT ReverseWordBy('1,12,123,1234,12345,123456',   ',') B;
+----------------------------+
| B                          |
+----------------------------+
| 123456,12345,1234,123,12,1 |
+----------------------------+
1 row in set (0.00 sec)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式