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

标签 sql sql-server tsql numbers

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

'(082) 000-0000' to '0820000000' or
'+2782 000 0000' to '0820000000'

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

更新:
从你们所说的来看,这是一个小峰值:

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

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

最佳答案

如果您使用的是 SQL Server 2005 或更新版本,那么您最好的选择是创建一个 user-defined CLR function并使用正则表达式删除所有非数字字符。

如果您不想使用 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

然后像这样从你的表中选择:

SELECT dbo.RemoveNonNumerics(your_column) AS your_tidy_column
FROM your_table

关于sql - 从数字+ SQL中删除非数字数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/630472/

相关文章:

sql - 提取 Rails 中关联的最后一个值

sql - 左连接到两个内部连接的表

tsql - 删除最后一行

sql - 我如何将 Case 语句的 Null 值返回到 Group by

sql - 只有 ID 的表和许多联结表

sql - 改进我的 SQL Select 语句以选择尚未完全完成某个部分的学生

sql-server - 串行 SqlContext 错误。步骤 'connecting' 失败

.net - 使用 Amazon RDS SQL Server 的 .NET Windows 窗体应用程序的安全模型

sql - 使用 CTE 进行递归查询

sql-server - 需要确保字符串之间有一个连字符