2016-05-17 20 views
2

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

是与散列只有(部分)字混淆了数字? – Mihai

+0

是的。与哈希值。但是&hash不是全部字符串。 –

回答

8

如果字符串以数字开头,则包含非数字字符,你可以使用CAST()功能或将其转换为数字隐含加入了0

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

要提取号码的开出的任意的,你可以添加自定义functionthis

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 
+0

是的,它正在工作。谢谢。 :) –

+0

真棒工作感谢亲爱的 – Darkcoder

2

在PHP试试这个

$string = '9072&h'; 
echo preg_replace("/[^0-9]/", '', $string);// output: 9072 

或请点击此链接做到这一点在MySQL Refer the link

1

尝试, 查询级别,

SELECT CAST('1&hash' AS UNSIGNED); 

为PHP,

echo intval('13213&hash'); 
相关问题