Nếu chuỗi bắt đầu bằng một số, sau đó chứa các ký tự không phải số, bạn có thể sử dụng CAST()
hoặc chuyển đổi nó thành số một cách hoàn toàn bằng cách thêm 0
:
SELECT CAST('1234abc' AS UNSIGNED); -- 1234
SELECT '1234abc'+0; -- 1234
Để trích xuất các số từ một tùy ý chuỗi bạn có thể thêm hàm tùy chỉnh như điều này :
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 ;
Khi hàm được xác định, bạn có thể sử dụng nó trong truy vấn của mình:
SELECT ExtractNumber("abc1234def") AS number; -- 1234