本次分享的主題是關於如何使用 T-SQL 來處理數字,以便取得文數字的資料中,所有的數字的值。
直接看程式碼:
-- 宣告變數
DECLARE @position int, @strInput nvarchar(100), @intASCII int, @strTemp nvarchar(1), @strOuput nvarchar(100)
-- 初始化變數
SET @position = 1
SET @strInput = '(02)2311-3731'
SET @strTemp = ''
SET @strOuput = ''
-- 當目前的字元位置小於或等於輸入的字串長度時
WHILE @position <= DATALENGTH(@strInput)
BEGIN
-- 取得某個位置的字元
SET @strtemp = SUBSTRING(@strInput, @position, 1)
-- 取得單一字元的 ASCII 之值
SET @intASCII = ASCII(@strTemp)
-- 判斷是否為數字:介於 48 ~ 57 之間
IF (@intASCII >=48 and @intASCII <= 57)
BEGIN
-- 將目前的數字附加到先前的數字之後
SET @strOuput = @strOuput + @strTemp
END
-- 將目前的字元位置再加上 1,也就是往後移動 1 個字元
SET @position = @position + 1
END
PRINT N'轉換前的文字:' + @strInput
PRINT N'轉換後的文字:' + @strOuput
執行結果:
從上面的執行結果,可以看到原本轉換前文字:(02)2311-3731,在經過轉換之後,就變成了:0223113731。
為了方便解說,所以程式碼都是寫死的,然而,在實務應用上,是會把上面的程式碼寫成使用者自訂函數,方便隨時呼叫、增加執行速度(因為使用者自訂函數不需要重新剖析和最佳化)。至於怎麼改,可以參考上一篇分享的文章:如何使用 T-SQL 取到小數點後第 n 位。
如果說要找出非數字的值,相信大家會舉一反三,知道要怎麼做吧!