从字符串中提取数字

时间:2022-02-26 07:00:24

create table #t(id varchar(20))

insert into #t
select 'abc001' union
select 'a002cc' union
select '003qee'

--查询结果
001
002
003
请问下这个查询怎么写,从字符串中提取数字

2 个解决方案

#1


IF OBJECT_ID('DBO.GET_NUMBER2') IS NOT NULL
    DROP FUNCTION dbo.GET_NUMBER2;
GO
CREATE FUNCTION dbo.GET_NUMBER2 (@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
    WHILE PATINDEX('%[^0-9]%', @S) > 0
    BEGIN
        SET @S = STUFF(@S, PATINDEX('%[^0-9]%', @S), 1, '');
    END;
    RETURN @S;
END;
GO


SELECT  DBO.GET_NUMBER2(id)
FROM    #T


从字符串中提取数字

#2


select substring(string,patindex('%[^0-9][0-9]%',string)+1,patindex('%[0-9][^0-9]%',string)-patindex('%[^0-9][0-9]%',string))
这个只能获取该字符串出现的第一个数字串,多次出现参考楼上。

#1


IF OBJECT_ID('DBO.GET_NUMBER2') IS NOT NULL
    DROP FUNCTION dbo.GET_NUMBER2;
GO
CREATE FUNCTION dbo.GET_NUMBER2 (@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
    WHILE PATINDEX('%[^0-9]%', @S) > 0
    BEGIN
        SET @S = STUFF(@S, PATINDEX('%[^0-9]%', @S), 1, '');
    END;
    RETURN @S;
END;
GO


SELECT  DBO.GET_NUMBER2(id)
FROM    #T


从字符串中提取数字

#2


select substring(string,patindex('%[^0-9][0-9]%',string)+1,patindex('%[0-9][^0-9]%',string)-patindex('%[^0-9][0-9]%',string))
这个只能获取该字符串出现的第一个数字串,多次出现参考楼上。