I\'m trying find the best way to remove nonnumerical data from a varchar in SQL e.g.
\'(082) 000-0000\' to \'0820000000\' or
\'+2782 000 0000\' to \'0820000000\'
If you're using SQL Server 2005 or newer then your best option is to create a user-defined CLR function and use a regular expression to remove all non-numeric characters.
If you don't want to use a CLR function then you could create a standard user-defined function. This will do the job although it won't be as efficient:
CREATE FUNCTION dbo.RemoveNonNumerics(@in VARCHAR(255))
RETURNS VARCHAR(255)
AS
BEGIN
DECLARE @out VARCHAR(255)
IF (@in IS NOT NULL)
BEGIN
SET @out = ''
WHILE (@in <> '')
BEGIN
IF (@in LIKE '[0-9]%')
SET @out = @out + SUBSTRING(@in, 1, 1)
SET @in = SUBSTRING(@in, 2, LEN(@in) - 1)
END
END
RETURN(@out)
END
And then select from your table like so:
SELECT dbo.RemoveNonNumerics(your_column) AS your_tidy_column
FROM your_table