首页 > 解决方案 > 从字符串的开头提取所有数字?

问题描述

我有一张表,其中包含我要清理的一些不良数据。

字段示例如下

36234735HAN876

2342JOE9823

554444PUT003

我想要做的是删除第一个字母字符之前的所有数字字符,如下所示:

HAN876

JOE9823

PUT003

实现这一目标的最佳方法是什么?我使用了以下方法,但这只能用于从字符串中提取所有数字,而不是字母字符之前的数字

如何使用 T-SQL 从字符串中获取数字部分?

标签: sqlsql-server-2012

解决方案


您可以使用PATINDEX来定位字符串中字母字符的第一个位置,然后使用SUBSTRING仅返回该位置之后的字符来实现此目的:

CREATE TABLE #temp (val VARCHAR(50));
INSERT INTO #temp VALUES ('36234735HAN876'), ('2342JOE9823'), ('554444PUT003'), ('TEST1234');

SELECT  val,
        SUBSTRING(val, PATINDEX('%[A-Z]%', val), LEN(val)) AS output
  FROM  #temp;

DROP TABLE #temp;

输出:

val             output
36234735HAN876  HAN876
2342JOE9823     JOE9823
554444PUT003    PUT003
TEST1234        TEST1234

请注意,我创建了一个临时表,其中有一列名为val. 您应该将其更改为与实际调用的任何列一起使用。

关于区分大小写:如果您使用不区分大小写的排序规则,这将毫无问题。如果您的排序规则区分大小写,那么您可能需要更改匹配的模式以适应大写和小写字母。


推荐阅读