mysql 非合法数字_MySQL剥离非数字字符进行比较

80a635a7761ce120f97ac559177bdeb5.png

白衣染霜花

获得最高评价的答案(@ user1467716)并不是最快的。为他们提出反弹的工作建议而向他们致以崇高的敬意!这是一个改进的版本:DELIMITER ;;DROP FUNCTION IF EXISTS `STRIP_NON_DIGIT`;;CREATE DEFINER=`root`@`localhost` FUNCTION `STRIP_NON_DIGIT`(input VARCHAR(255)) RETURNS VARCHAR(255) CHARSET utf8READS SQL DATABEGIN   DECLARE output    VARCHAR(255) DEFAULT '';   DECLARE iterator  INT          DEFAULT 1;   DECLARE lastDigit INT          DEFAULT 1;   DECLARE len       INT;   SET len = LENGTH(input) + 1;   WHILE iterator < len DO      -- skip past all digits      SET lastDigit = iterator;      WHILE ORD(SUBSTRING(input, iterator, 1)) BETWEEN 48 AND 57 AND iterator < len DO         SET iterator = iterator + 1;      END WHILE;      IF iterator != lastDigit THEN         SET output = CONCAT(output, SUBSTRING(input, lastDigit, iterator - lastDigit));      END IF;      WHILE ORD(SUBSTRING(input, iterator, 1)) NOT BETWEEN 48 AND 57 AND iterator < len DO         SET iterator = iterator + 1;      END WHILE;   END WHILE;   RETURN output;END;;在测试服务器上测试5000次:-- originalExecution Time : 7.389 secExecution Time : 7.257 secExecution Time : 7.506 sec-- ORD between not string INExecution Time : 4.031 sec-- With less substringsExecution Time : 3.243 secExecution Time : 3.415 secExecution Time : 2.848 sec

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值