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