首頁 >資料庫 >mysql教程 >如何從 SQL 中的字串中提取數值?

如何從 SQL 中的字串中提取數值?

Patricia Arquette
Patricia Arquette原創
2025-01-21 01:36:08512瀏覽

How Can I Extract Numeric Values from Strings in SQL?

從字串中擷取數值資料

在資料庫環境中,可能需要從字串中提取嵌入的數值資料。考慮以下範例:

<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn