首页 > 数据库 > mysql教程 > 如何从 SQL 中的字符串中提取数值?

如何从 SQL 中的字符串中提取数值?

Patricia Arquette
发布: 2025-01-21 01:36:08
原创
442 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板