Personally, I would use a different function, a WHILE loop isn't going to perform well and nor is a scalar function. This uses Alan Burstein's NGrams8K: http://www.sqlservercentral.com/articles/Tally+Table/142316/.
After you have that function, you can create the function to remove the non-numeric values:CREATE FUNCTION dbo.RemoveNonNumeric (@Phone varchar(8000)) RETURNS TABLE
AS RETURN
SELECT (SELECT N.token + ''
FROM dbo.NGrams8k(@Phone,1) N
WHERE N.token LIKE '[0-9]'
ORDER BY N.position
FOR XML PATH('')) AS PhoneNum
GO
Now you can call it easily using APPLY. For example:WITH VTE AS (
SELECT *
FROM (VALUES ('123-456,789'),
('1245,6957,4'),
('12346 647247')) V(Phone))
SELECT *
FROM VTE V
CROSS APPLY RemoveNonNumeric(V.Phone) RNN;
GO
Thom~
Excuse my typos and sometimes awful grammar. My fingers work faster than my brain does.
Larnu.uk