CREATE FUNCTION dbo.fn_KeepOnlyNumbers (@input NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%', @input) > 0
BEGIN
SET @input = STUFF(@input, PATINDEX('%[^0-9]%', @input), 1, '')
END
RETURN @input
END
Usage:
SELECT dbo.fn_KeepOnlyNumbers('A1B2C-3D_4E!5F') AS OnlyNumbers