mysql如何搜索不连续的字符_如何从MySQL中的一串文本中选择不连续的字符?

这个功能做你想要的:

CREATE DEFINER = `root`@`localhost` FUNCTION `test`.`getsubset`(selection mediumtext, longstring mediumtext)

RETURNS varchar(200)

LANGUAGE SQL

NOT DETERMINISTIC

CONTAINS SQL

SQL SECURITY DEFINER

COMMENT 'This function returns a subset of characters.'

BEGIN

SET @res:='';

SET @selection:=selection;

WHILE @selection<>'' DO

set @pos:=CONVERT(@selection, signed);

set @res := concat_ws('',@res,SUBSTRING(longstring,@pos,1));

IF LOCATE(',',@selection)=0 THEN

SET @selection:='';

END IF;

set @selection:=SUBSTRING(@selection,LOCATE(',',@selection)+1);

END WHILE;

RETURN @res;

END

注意:CONVERT(‘1,2,3,4’,已签名)将产生1,但它会发出警告.

我将它定义为可在数据库测试中使用.

该函数有两个参数;带有位置列表的字符串(!),以及从中获取字符的长字符串.

使用此示例:

mysql> select * from keepdiscard;

+---------+------------+

| charind | keepordisc |

+---------+------------+

| 1 | keep |

| 2 | discard |

| 3 | keep |

| 4 | discard |

| 5 | keep |

| 6 | keep |

+---------+------------+

6 rows in set (0.00 sec)

mysql> select * from test;

+-------------------+

| longstring |

+-------------------+

| abcdefghijklmnopq |

| 123456789 |

+-------------------+

2 rows in set (0.00 sec)

mysql> select getsubset(group_concat(charind ORDER BY charind),longstring) as result from keepdiscard, test where keepordisc='keep' group by longstring;

+--------+

| result |

+--------+

| 1356 |

| acef |

+--------+

2 rows in set, 6 warnings (0.00 sec)

警告源于在函数中快速转换为整数. (见上面的评论)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值