Mysql中存储过程或函数 如何将逗号分隔的字符串倒序输出 如 :4531,8651,3256 变为: 3256,8651,4531
答案:2 悬赏:50
解决时间 2021-02-15 03:33
- 提问者网友:他的思颖
- 2021-02-14 09:04
Mysql中存储过程或函数 如何将逗号分隔的字符串倒序输出 如 :4531,8651,3256 变为: 3256,8651,4531
最佳答案
- 二级知识专家网友:滚刀废物浮浪人
- 2021-02-14 10:40
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)
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)
全部回答
- 1楼网友:野心和家
- 2021-02-14 11:06
母爱触动了我的心灵母爱是一盏盏路灯,为我驱除黑暗,独留光明;母爱是一根根琴弦,触动了我的心灵;母爱是一把把雨伞,为我遮风挡雨;母爱是……还记得看过一篇文章,名字叫《藏羚羊的跪拜》,写的是:一位老猎人早晨走出房间,看见在不远处有一支肥健的藏羚羊,他不禁眼前一亮,急忙取出一把猎枪,正当他来到藏羚羊面前,举起枪对准它时,这只母藏羚羊突然间两只前腿跪了下来,两行热泪涌出了他那双美丽而又无助的眼睛,老猎人心里一颤,但还是闭上了眼睛,山谷里回荡着一声枪响,藏羚羊死了,它仍跪在地上,那泪痕依稀可见。老猎人回到屋里,辗转反侧,久久不能入睡,第二天,当他出门剖开它的腹部时,老猎人惊呆了,他的肚子里有一只已经成形但并没来得及出生的小藏羚羊,猎人觉悟了:她之所以跪下来,用哀求的眼神望着他,只是为了保护她腹中未出生的孩子。保护儿女,物犹如此,人何以堪?在512大地震中,母爱的无私与真挚,得以再次展现。她死了,是被垮塌下来的房子压死的,但她死亡的姿势很诡异:双膝跪着,双手向前匍匐着,身体弓着,当救援人员来到她面前时,感到很惊异,后来,在她的身体下面发现了一个还在襁褓中的婴儿,里面还发现了一个手机,上面有一条未发出去的短信:宝贝,如果你还活着,请记住,我爱你。这感人的一句话,这生命最后的时刻,让我不禁潸然泪下。天下所有慈母的跪拜,包括动物在内,都是神圣的。有一位伟人说过:“伟大的母爱永远是孩子安全的庇护所,它是孩子成人强大的保护”。母爱是大海,那我就是一条小鱼,永远离不开她的胸怀。母爱是雨露,那我就是一棵小树,永远离不开她的滋润。母爱是琴弦,那我就是跳动的音符,永远触动我的心灵。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯