从字符串中提取数值数据
在数据库环境中,可能需要从字符串中提取嵌入的数值数据。考虑以下示例:
<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中文网其他相关文章!