今天公司項目中遇到了一個需求,要求提取用戶電話號碼字段中的所有電話信息。
由於該字段在項目最初設計中沒有嚴格控制數據質量,導致用戶在輸入時包含了很多非電話的信息,如用戶名字等(136 **** **** 張san)
要求提取出當中的136********
思路:創建函數,依次判斷每個字符的ASCII碼是否在[0,9]中,提取該部分內容。
Create Function USF_ExtractNumeric ( @inputStr nvarchar(50) ) Returns nvarchar(50) AS Begin Declare @outputStr nvarchar(50) Set @outputStr = '' If ISNUMERIC(@inputStr) = 1 Begin Return @inputStr End Declare @I Int Set @I = 1 While @I <= Len(@inputStr) Begin If ASCII(SUBSTRING(@inputStr,@I,1)) <= 57 and ASCII(SUBSTRING(@inputStr,@I,1)) >= 48 Begin Set @outputStr = @outputStr + SUBSTRING(@inputStr,@I,1) End Set @I = @I + 1 End Return @outputStr End
測試結果:

