Mysql中存储过程或函数 如何将逗号分隔的字符串倒序输出 如 :4531,8651,3256 变为: 3256,8651,4531
1个回答
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)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询