我有一些包含字母数字值的字符串输出。我只想从该字符串中获取数字。如何通过查询获取?我可以使用哪个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 要从任意字符串中提取数字,您可以添加一个自定义函数,如下所示:
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来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。