我使用此代码从一个字符串中删除非数字字符:SQL Server函数的执行 - while语句行为意外
ALTER FUNCTION [dbo].[StripNonNumerics](@Temp VARCHAR(255))
RETURNS VARCHAR
AS
BEGIN
DECLARE @KeepValues AS VARCHAR(50);
SET @KeepValues = '%[^0-9]%';
WHILE PATINDEX(@KeepValues, @Temp) > 0
BEGIN
SET @Temp = STUFF(@Temp, PATINDEX(@KeepValues, @Temp), 1, '');
END
RETURN @Temp
END;
我想到,如果我调用该函数,将输入的字符串这样之一:
select [dbo].[StripNonNumerics]('vAn34nd2')
我能得到这样的输出:
342
相反,我得到:
3
我改变了输入来测试这种行为,我注意到它只需要第一个非数字字符序列。你能告诉我我忽略了什么吗?
感谢
[*坏习惯踢*:声明VARCHAR没有(长度)](http://sqlblog.com/ blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx) - 你应该**总是为任何'varchar'变量和参数提供一个长度你用。否则,它们可能最终成为**默认长度**,如果参数或返回值为** 1 CHARACTER ** ..... –