3 回答

TA貢獻1859條經驗 獲得超6個贊
MySQL中沒有使用正則表達式提取文本的語法。您可以使用REGEXP來識別包含兩個連續數字的行,但是要提取它們,您必須使用普通的字符串操作函數,在這種情況下這非常困難。
備擇方案:
從數據庫中選擇整個值,然后在客戶端上使用正則表達式。
使用對SQL標準有更好支持的其他數據庫(我知道這可能不是一個選擇)。然后您可以使用:
SUBSTRING(originaltext from '%#[0-9]{2}#%' for '#')
。

TA貢獻1797條經驗 獲得超4個贊
我將代碼用作存儲過程(函數),可以提取單個塊中從數字構建的任何數字。這是我更廣泛的圖書館的一部分。
DELIMITER $$
-- 2013.04 [email protected]
-- 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$$
添加回答
舉報