为了账号安全,请及时绑定邮箱和手机立即绑定

如何从MySQL的文本字段中提取两个连续的数字?

如何从MySQL的文本字段中提取两个连续的数字?

慕斯709654 2019-10-21 12:39:51
我有一个MySQL数据库,查询如下:SELECT `id`, `originaltext` FROM `source` WHERE `originaltext` regexp '[0-9][0-9]'这将检测所有带有2位数字的原始文本。我需要MySQL将这些数字作为字段返回,因此我可以进一步处理它们。理想情况下,如果我可以添加应大于20的其他条件,那将是不错的选择,但我也可以单独进行。
查看完整描述

3 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

MySQL中没有使用正则表达式提取文本的语法。您可以使用REGEXP来识别包含两个连续数字的行,但是要提取它们,您必须使用普通的字符串操作函数,在这种情况下这非常困难。

备择方案:

  • 从数据库中选择整个值,然后在客户端上使用正则表达式。

  • 使用对SQL标准有更好支持的其他数据库(我知道这可能不是一个选择)。然后您可以使用:SUBSTRING(originaltext from '%#[0-9]{2}#%' for '#')


查看完整回答
反对 回复 2019-10-21
?
繁星coding

TA贡献1797条经验 获得超4个赞

我将代码用作存储过程(函数),可以提取单个块中从数字构建的任何数字。这是我更广泛的图书馆的一部分。


DELIMITER $$


--  2013.04 michal@glebowski.pl

--  FindNumberInText("ab 234 95 cd", TRUE) => 234  

--  FindNumberInText("ab 234 95 cd", FALSE) => 95


DROP FUNCTION IF EXISTS FindNumberInText$$

CREATE FUNCTION FindNumberInText(_input VARCHAR(64), _fromLeft BOOLEAN) RETURNS VARCHAR(32)

BEGIN

  DECLARE _r              VARCHAR(32) DEFAULT '';

  DECLARE _i              INTEGER DEFAULT 1;

  DECLARE _start          INTEGER DEFAULT 0;

  DECLARE _IsCharNumeric  BOOLEAN;


  IF NOT _fromLeft THEN SET _input = REVERSE(_input); END IF;

  _loop: REPEAT

    SET _IsCharNumeric = LOCATE(MID(_input, _i, 1), "0123456789") > 0;

    IF _IsCharNumeric THEN

      IF _start = 0 THEN SET _start  = _i;  END IF;

    ELSE

      IF _start > 0 THEN LEAVE _loop;       END IF;

    END IF;

    SET _i = _i + 1;

  UNTIL _i > length(_input) END REPEAT;


  IF _start > 0 THEN

    SET _r = MID(_input, _start, _i - _start);

    IF NOT _fromLeft THEN SET _r = REVERSE(_r);  END IF;

  END IF;

  RETURN _r;

END$$


查看完整回答
反对 回复 2019-10-21
  • 3 回答
  • 0 关注
  • 1246 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信