從字符串中提取數值數據
在數據庫環境中,可能需要從字符串中提取嵌入的數值數據。考慮以下示例:
字符串 1: 003Preliminary Examination Plan
字符串 2: Coordination005
字符串 3: Balance1000sheet
期望的結果是從每個字符串中只提取數字:
字符串 1: 003
字符串 2: 005
字符串 3: 1000
為了在SQL中實現這一點,可以創建一個自定義用戶定義函數 (UDF):
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
這個UDF從本質上識別並刪除輸入字符串中的所有非數字字符。然後,它檢查結果字符串是否可以轉換為整數並相應地返回它。
要使用此函數,只需將其應用於相關列:
SELECT dbo.udf_GetNumeric(column_name)
from table_name
這將只返回指定列中字符串的數字部分。對於提供的示例數據,結果將與預期值匹配:
003
005
1000
注意: 原代碼中的RETURN
語句存在語法錯誤,已修正為更簡潔有效的RETURN ISNULL(TRIM(@strAlphaNumeric), '0')
,避免了不必要的嵌套和類型轉換問題。 這個修正後的函數更清晰,也更易於理解和維護。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3