我使用此代碼從一個字符串中刪除非數字字符: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 ** ..... –