查询以仅从字符串中获取数字

新手上路,请多包涵

我有这样的数据:

 string 1: 003Preliminary Examination Plan
string 2: Coordination005
string 3: Balance1000sheet

我期望的输出是

string 1: 003
string 2: 005
string 3: 1000

我想在 SQL 中实现它。

原文由 Avinash Mehta 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 298
2 个回答

首先创建这个 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(@strAlphaNumeric,0)
END
GO

现在使用 function 作为

SELECT dbo.udf_GetNumeric(column_name)
from table_name

SQL 小提琴

我希望这能解决你的问题。

参考

原文由 Prahalad Gaggar 发布,翻译遵循 CC BY-SA 4.0 许可协议

SQL Server 2017 及更高版本的解决方案,使用 TRANSLATE

 DECLARE @T table (string varchar(50) NOT NULL);

INSERT @T
    (string)
VALUES
    ('003Preliminary Examination Plan'),
    ('Coordination005'),
    ('Balance1000sheet');

SELECT
    result =
        REPLACE(
            TRANSLATE(
                T.string COLLATE Latin1_General_CI_AI,
                'abcdefghijklmnopqrstuvwxyz',
                SPACE(26)),
            SPACE(1),
            SPACE(0))
FROM @T AS T;

输出:

结果003 005 1000

该代码通过以下方式工作:

  1. 用空格替换字符 az(忽略大小写和重音符号)
  2. 用空字符串替换空格。

提供给 TRANSLATE 的字符串可以扩展为包含其他字符。

原文由 Paul White 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进