iT邦幫忙

DAY 28
7

T-SQL 應用之美系列 第 28

如何取得文數字的資料中,所有的數字的值

本次分享的主題是關於如何使用 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 位

如果說要找出非數字的值,相信大家會舉一反三,知道要怎麼做吧!


上一篇
如何使用 T-SQL 取到小數點後第 n 位
下一篇
如何動態組出 T-SQL 指令(上)
系列文
T-SQL 應用之美30

尚未有邦友留言

立即登入留言