猿问

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

我有一个MySQL数据库,查询如下:


SELECT `id`, `originaltext` FROM `source` WHERE `originaltext` regexp '[0-9][0-9]'

这将检测所有带有2位数字的原始文本。


我需要MySQL将这些数字作为字段返回,因此我可以进一步处理它们。


理想情况下,如果我可以添加应大于20的其他条件,那将是不错的选择,但我也可以单独进行。


慕斯709654
浏览 1328回答 3
3回答

BIG阳

MySQL中没有使用正则表达式提取文本的语法。您可以使用REGEXP来识别包含两个连续数字的行,但是要提取它们,您必须使用普通的字符串操作函数,在这种情况下这非常困难。备择方案:从数据库中选择整个值,然后在客户端上使用正则表达式。使用对SQL标准有更好支持的其他数据库(我知道这可能不是一个选择)。然后您可以使用:SUBSTRING(originaltext from '%#[0-9]{2}#%' for '#')。

繁星coding

我将代码用作存储过程(函数),可以提取单个块中从数字构建的任何数字。这是我更广泛的图书馆的一部分。DELIMITER $$--  2013.04 michal@glebowski.pl--  FindNumberInText("ab 234 95 cd", TRUE) => 234  --  FindNumberInText("ab 234 95 cd", FALSE) => 95DROP 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$$
随时随地看视频慕课网APP
我要回答