從字串中擷取數值資料
在資料庫環境中,可能需要從字串中提取嵌入的數值資料。考慮以下範例:
<code>字符串 1: 003Preliminary Examination Plan 字符串 2: Coordination005 字符串 3: Balance1000sheet</code>
期望的結果是從每個字串中只提取數字:
<code>字符串 1: 003 字符串 2: 005 字符串 3: 1000</code>
為了在SQL中實現這一點,可以建立一個自訂使用者定義函數 (UDF):
<code class="language-sql">CREATE FUNCTION dbo.udf_GetNumeric ( @strAlphaNumeric VARCHAR(256) ) RETURNS VARCHAR(256) AS BEGIN DECLARE @intAlpha INT SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric) BEGIN WHILE @intAlpha > 0 BEGIN SET @strAlphaNumeric = STUFF(@strAlphaNumeric, @intAlpha, 1, '' ) SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric ) END END RETURN ISNULL(TRIM(@strAlphaNumeric), '0') END GO</code>
這個UDF本質上辨識並刪除輸入字串中的所有非數字字元。然後,它檢查結果字串是否可以轉換為整數並相應地返回它。
要使用此函數,只需將其應用於相關列:
<code class="language-sql">SELECT dbo.udf_GetNumeric(column_name) from table_name</code>
這將只傳回指定列中字串的數字部分。對於提供的範例數據,結果將與預期值相符:
<code>003 005 1000</code>
注意: 原始程式碼中的RETURN
語句存在語法錯誤,已修正為更簡潔有效的RETURN ISNULL(TRIM(@strAlphaNumeric), '0')
,避免了不必要的巢狀和型別轉換問題。 這個修正後的函數更清晰,也更容易理解和維護。
以上是如何從 SQL 中的字串中提取數值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!