如何从mysql中的字符串中只获取数字?

新手上路,请多包涵

我有一些包含字母数字值的字符串输出。我只想从该字符串中获取数字。我怎样才能通过查询来获取这个?我可以使用哪个 MySql 函数?

我的查询是这样的:

 select DISTINCT SUBSTRING(referrerURL,71,6)
from   hotshotsdblog1.annonymoustracking
where  advertiserid = 10
limit  10;

输出 :

 100683
101313
19924&
9072&h
12368&
5888&h
10308&
100664
1&hash
101104

我想要像这样的输出:

 100683
101313
19924
9072
12368
5888
10308
100664
1
101104

原文由 Jay Doshi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 667
2 个回答

如果字符串以数字开头,然后包含非数字字符,则可以使用 CAST() 函数或通过添加 0 将其隐式转换为数字:

 SELECT CAST('1234abc' AS UNSIGNED); -- 1234
SELECT '1234abc'+0; -- 1234

要从 任意 字符串中提取数字,您可以添加 如下 自定义 函数

 DELIMITER $$

CREATE FUNCTION `ExtractNumber`(in_string VARCHAR(50))
RETURNS INT
NO SQL
BEGIN
    DECLARE ctrNumber VARCHAR(50);
    DECLARE finNumber VARCHAR(50) DEFAULT '';
    DECLARE sChar VARCHAR(1);
    DECLARE inti INTEGER DEFAULT 1;

    IF LENGTH(in_string) > 0 THEN
        WHILE(inti <= LENGTH(in_string)) DO
            SET sChar = SUBSTRING(in_string, inti, 1);
            SET ctrNumber = FIND_IN_SET(sChar, '0,1,2,3,4,5,6,7,8,9');
            IF ctrNumber > 0 THEN
                SET finNumber = CONCAT(finNumber, sChar);
            END IF;
            SET inti = inti + 1;
        END WHILE;
        RETURN CAST(finNumber AS UNSIGNED);
    ELSE
        RETURN 0;
    END IF;
END$$

DELIMITER ;

定义函数后,您可以在查询中使用它:

 SELECT ExtractNumber("abc1234def") AS number; -- 1234

原文由 Eugene Yarmash 发布,翻译遵循 CC BY-SA 3.0 许可协议

在这里,我使用此功能获得了成功:

select REGEXP_REPLACE('abc12.34.56-ghj^-_~#@!', '[^0-9]+', '')

输出: 123456

解释:基本上我要求 mysql 将所有“非数字”从 0 到 9 替换为“”。

原文由 rafwell 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题