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

标签 mysql sql

我有一些包含字母数字值的字符串输出。我只想从该字符串中获取数字。我怎样才能通过查询获取这个?我可以使用哪个 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

最佳答案

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

将其隐式转换为数字
SELECT CAST('1234abc' AS UNSIGNED); -- 1234
SELECT '1234abc'+0; -- 1234

要从 任意 字符串中提取数字,您可以添加自定义 function喜欢 this :

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

关于mysql - 如何从mysql中的字符串中只获取数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37268248/

相关文章:

php - 使用 php 显示数据库结果时遇到问题

mysql - 根据 mysql 中另一个表的数据构建是/否列

mysql - 通过 CSV 将 JSON 字符串导入 MySQL。是好是坏?

mysql - 在Mysql中从连接创建表时出错

sql - 多对多关系中的 AND 条件

mysql - SQL: 查询where column = x, when column2 != y;当 column2 = x 时 y = 列..如果这是有道理的

mysql - mySQL 有连接时间限制吗?

mysql - 使用一条命令同步删除多个表中的数据

sql - 存储过程将不返回任何错误消息或编号

sql - 映射用 Hibernate 返回表的 postgres 函数