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))
这个只能获取该字符串出现的第一个数字串,多次出现参考楼上。
这个只能获取该字符串出现的第一个数字串,多次出现参考楼上。