我正在尝试找到从 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/