Sql-Server
如何從字元串中去除非數字字元?
使用者在一個框中輸入一個搜尋詞,該值被傳遞到一個儲存過程,並根據數據庫中的幾個不同欄位進行檢查。這些欄位並不總是具有相同的數據類型。
一個欄位(電話號碼)由所有數字組成,因此在檢查時會使用 .Net CLR 函式從字元串中刪除所有非數字字元。
SELECT dbo.RegexReplace('(123)123-4567', '[^0-9]', '')
問題是,此功能有時會突然停止工作,並出現以下錯誤:
消息 6533,第 16 級,狀態 49,第 2 行 AppDomain MyDBName.dbo[runtime].1575 已通過升級策略解除安裝,以確保 應用程序的一致性。訪問關鍵資源時發生記憶體不足。 System.Threading.ThreadAbortException:類型異常 'System.Threading.ThreadAbortException' 被拋出。 System.Threading.ThreadAbortException:
我已經嘗試了MSDN上針對此錯誤發布的建議,但仍然遇到問題。目前,切換到 64 位伺服器不是我們的選擇。
我知道重新啟動伺服器會釋放它所擁有的任何記憶體,但這在生產環境中不是一個可行的解決方案。
有沒有辦法僅使用 T-SQL 從 SQL Server 2005 中的字元串中去除非數字字元?
我在 SO 上發現了這個 T-SQL 函式,它可以從字元串中刪除非數字字元。
CREATE Function [fnRemoveNonNumericCharacters](@strText VARCHAR(1000)) RETURNS VARCHAR(1000) AS BEGIN WHILE PATINDEX('%[^0-9]%', @strText) > 0 BEGIN SET @strText = STUFF(@strText, PATINDEX('%[^0-9]%', @strText), 1, '') END RETURN @strText END
這效果更好:
SELECT (SELECT CAST(CAST(( SELECT SUBSTRING(FieldToStrip, Number, 1) FROM master..spt_values WHERE Type='p' AND Number <= LEN(FieldToStrip) AND SUBSTRING(FieldToStrip, Number, 1) LIKE '[0-9]' FOR XML Path('')) AS xml) AS varchar(MAX))) FROM SourceTable