只获取列数据的数字部分?

时间:2014-04-10 11:43:42

标签: sql-server tsql numbers charindex

我的数据库中有一个包含数字和字母数字字符的列。 我只想从列中获取数字(6个数字)。

数据示例:

TEST_123456_Prod
DB111111P
F222222FN
PROD999999_SCF

我想创建一个select语句,该语句返回此列中除了数字之外的所有行。

我正在使用SQL Server,所以可能需要使用Charindex,但不知道如何使用。

2 个答案:

答案 0 :(得分:3)

要剥离所有字母数字字符,您可以创建一个函数:

CREATE FUNCTION [dbo].[RemoveAlphaCharacters](@InputString VARCHAR(1000))
RETURNS VARCHAR(1000)
AS
BEGIN
  WHILE PATINDEX('%[^0-9]%',@InputString)>0
        SET @InputString = STUFF(@InputString,PATINDEX('%[^0-9]%',@InputString),1,'')     
  RETURN @InputString
END

GO

然后使用它来获得所需的结果:

select dbo.RemoveAlphaCharacters(databasename)
from T1;

SQL Fiddle

答案 1 :(得分:2)

这适用于您的所有示例:

SELECT 
    SUBSTRING(databasename, 
              PATINDEX('%[0-9]%', databasename), 
              LEN(databasename) - (PATINDEX('%[0-9]%', REVERSE(databasename)) + PATINDEX('%[0-9]%', databasename)) + 2)
FROM dbs

以下是代码如何运作的SQLFiddle