从数字中删除非数字数据 + SQL

3 sql t-sql sql-server numbers

我正在尝试找到从 SQL 中的 varchar 中删除非数字数据的最佳方法,例如

'(082) 000-0000' to '0820000000' or
'+2782 000 0000' to '0820000000'
Run Code Online (Sandbox Code Playgroud)

困难在于我并不总是确定输入的数字格式是什么,如上所示,所以我希望基本上删除所有不是数字的内容。

更新:
根据你们所说,这是一个小尖峰完成:

declare @Num varchar(20)

set @Num = ' + (82) 468 6152 '

--strip nonnumrical data out of @num

print @Num

set @Num = replace(@Num, ' ', '')
set @Num = replace(@Num, '+', '')
set @Num = replace(@Num, '-', '')
set @Num = replace(@Num, '(', '')
set @Num = replace(@Num, ')', '')

print @Num
Run Code Online (Sandbox Code Playgroud)

但无法正确替换 [^0-9] 表达式。

Luk*_*keH 5

如果您使用的是 SQL Server 2005 或更高版本,那么最好的选择是创建用户定义的 CLR 函数并使用正则表达式来删除所有非数字字符。

如果您不想使用 CLR 函数,那么您可以创建标准的用户定义函数。虽然效率不高,但可以完成这项工作:

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
Run Code Online (Sandbox Code Playgroud)

然后从表中选择,如下所示:

SELECT dbo.RemoveNonNumerics(your_column) AS your_tidy_column
FROM your_table
Run Code Online (Sandbox Code Playgroud)