亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從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 [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$$


查看完整回答
反對 回復 2019-10-21
  • 3 回答
  • 0 關注
  • 1375 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號