如何在mysql中提取第一个数据?

时间:2014-08-09 08:37:27

标签: mysql regex

例如,

我有一个数据集如下:

asdf1234asdf
1235asdfasdf
asdfasdfef489

我怎样才能选择这样我可以获得如下结果?

1234
1235
489

2 个答案:

答案 0 :(得分:1)

如果您的MySQL版本支持create a function并使用regex等提取第一个数字:

DELIMITER $$
CREATE FUNCTION first_digits(str TEXT)
  RETURNS TEXT
BEGIN
  DECLARE ret TEXT DEFAULT '';
  DECLARE chr TEXT DEFAULT '';
  DECLARE i INT DEFAULT 1;
  WHILE i < (LENGTH(str) + 1) DO
    SET chr = SUBSTRING(str, i, 1);
    IF chr REGEXP '[0-9]'
      THEN SET ret = CONCAT(ret, chr);
    ELSEIF ret != ''
      THEN RETURN ret;
    END IF;
    SET i = i + 1;
  END WHILE;
  RETURN ret;
END;
$$
DELIMITER ;

然后只使用新创建的函数SELECT

first_digits();所需列
SELECT first_digits('asdf1234asdf') num;

num
1234

要提取所有数字(不仅是第一个),请删除ELSEIF部分并重命名digits等功能。

删除该功能:

DROP FUNCTION IF EXISTS first_digits;

希望这有帮助!

答案 1 :(得分:0)

遗憾的是,MySQL没有一种替代正则表达式的好方法,但是如果你只有一个数字序列,你可以使用trim

SELECT TRIM(BOTH 'abcdefghijklmnopqrstuvwxyz' FROM word) 
FROM (SELECT 'asdf1234asdf' AS word
      UNION ALL
      SELECT '1235asdfasdf'
      UNION ALL
      SELECT 'asdfasdfef489') t